$attrs/inheritAttrs可以实现组件的跨级传递

简介: $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>


1425695-20191006190431761-593229593.png

相关文章
|
11天前
|
前端开发 JavaScript
传递给组件
传递给组件
|
1月前
|
JavaScript
vue父组件点击事件向子组件传递值
vue父组件点击事件向子组件传递值
|
1月前
|
前端开发 JavaScript 开发者
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(二)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
30 0
|
1月前
|
JavaScript 前端开发 算法
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(一)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
24 0
|
1月前
|
JavaScript
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun
|
1月前
|
小程序
子组件调用父组件的方法并传递数据
子组件调用父组件的方法并传递数据
|
1月前
|
前端开发
React中兄弟组件通信和组件跨级传递Context的使用
React中兄弟组件通信和组件跨级传递Context的使用
|
9月前
|
JavaScript 前端开发 C++
04、props接收父组件的数据
04、props接收父组件的数据
|
JavaScript
Vue——05-02组件的数据、为什么data要使用函数、父组件给子组件传递数据的三种写法、父传子以及传两种以上的值、默认值以及父传子的引用类型
组件的数据、为什么data要使用函数、父组件给子组件传递数据的三种写法、父传子以及传两种以上的值、默认值以及父传子的引用类型
127 0
|
JavaScript
vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题
vue中父组件异步数据通过props方式传递给子组件,子组件接收不到的问题
320 0

热门文章

最新文章