$attrs/inheritAttrs可以实现组件的跨级传递
2024-10-20 20:49:18
$attrs/inheritAttrs可以实现组件的跨级传递
// 问题1 为什么this.$attrs可以得到主 传递过来的值
//$attrs 说明
// $attrs 可以很方便的做到属性透传,使用起来也比较简单,避免了多写 props 的痛苦。
// 当一个组件没有声明任何prop时候,attrs里面包含着全部的上层组件传递的所有数据(除style和class)
// 当一个组件声明了prop时候,attrs里面包含除去prop里面的数据剩下的数据。
// inheritAttrs
// 1.当在子组件中设置inheritAttrs: false的时候,attrs里面的属性不会当做html的data属性渲染在dom节点之上。
// 2.在子组件中不进行设置inheritAttrs的时候,attrs里面的属性会渲染在html节点之上
// 3.当设置为inheritAttrs: false的时候,在组件的声明周期created中可以通过 this.$attrs 获取里面的上层组件数据。
// 当在子组件中设置inheritAttrs: false的时候,attrs里面的属性是没有style和class的
// $attrs/$listeners可以跨级传递 兄弟之间就不行
// 最大的go组件里面引入go1组件
// go1组件里面有go2组件
// go2里面有go3组件
go.vue
<template>
<div>
我是 go
<go1
:foo="foo"
:boo="boo"
:coo="coo"
:doo="doo"
></go1>
</div>
</template> <script>
import go1 from "../go1/go1"
export default {
data(){
return{
foo: "Javascript",
boo: "Html",
coo: "CSS",
doo: "Vue"
}
}, components:{
go1
}
}
</script>
go1.vue
<template>
<div>
<h2>-----------------</h2>
<br>
我是go1111
<!-- <p>foo: {{ foo }}</p> -->
<!-- <p>go1得到主组件中的数据$attrs: {{ $attrs }}</p> -->
<go2 v-bind="$attrs"></go2>
<br>
<h2>-----------------</h2> </div>
</template> <script>
import go2 from "../go2/go2"
export default {
components:{
go2
},
inheritAttrs: false, // .当设置为inheritAttrs: false的时候,在组件的声明周期中可以通过 this.$attrs 获取里面的上层组件数据。
props: {
foo: String // 当声明了prop时候,attrs里面包含除去prop里面的数据剩下的数据。 所以下面没有 Javascript
}, created() {
console.log("我在1出输出",this.$attrs); // {boo: "Html", coo: "CSS", doo: "Vue"}
} }
</script>
go2.vue
<template>
<div>
<h2>-----------------</h2>
<br>
go222
<p>boo: {{ boo }}</p>
<p>childCom2: {{ $attrs }}</p>
<go3 v-bind="$attrs"></go3>
<br>
<h2>-----------------</h2>
</div>
</template>
<script>
import go3 from "../go3/go3"
export default {
components:{
go3
},
inheritAttrs: false,
props: {
boo: String //当声明了prop时候,attrs里面包含除去prop里面的数据剩下的数据。 所以下面没有 html
},
created() {
console.log("我是组件2",this.$attrs); // 我是组件2 {coo: "CSS", doo: "Vue"}
}
}
</script>
go3.vue
<template>
<div>
<h2>-------</h2>
<br>
go333
<p>childCom3: {{ $attrs }}</p>
<h2>-------</h2>
<br>
</div>
</template>
<script>
export default {
props: {
coo: String, //当声明了prop时候,attrs里面包含除去prop里面的数据剩下的数据。 所以下面没有 coo
},
created() {
console.log("我是组件3",this.$attrs); // 我是组件2 { doo: "Vue"}
}
}
</script>
最新文章
- Qt 工程 pro文件
- shell处理mysql增、删、改、查
- 使用 MongoDB 的_id 查询
- BlacJack游戏
- react 年-月-日 时:分:秒
- openwrt l7过滤qos配置
- javascript 命名空间,学习
- jQuery操作checkbox的问题
- MyEclipse2016统一字符编码
- 缓存表 内存表(将表keep到内存)
- js基础学习
- Redis入门到高可用(十六)—— 持久化
- oracle结合mybatis批量插入数据
- PHP官方文档和phpstorm配置指南
- Python中的实例方法、类方法、静态方法和普通方法
- 20175225《java程序设计》第五周学习总结
- 怎样把XP系统装到USB里?
- JQuery 之 动态加载JS或JS文件
- vps 切换内核
- APP之红点提醒三个阶段
热门文章
- 实例透彻分析CMS垃圾收集器执行过程
- C++学习三 模板类出错总结(Missing template arguments before &#39;L&#39;)
- 《Dapper》
- RPM 包
- MySQL实战45讲学习笔记:第四十一讲
- webrtc笔记(4): kurento 部署
- 原生js实现append()方法
- 海边拾贝-C-面试篇
- SQL Server 2014:为什么数据库里的表提示“单元格是只读的”,不能修改?该如何处理?
- 阿里云 .NET SDK Roa 和 Rpc 风格签名