• $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>
     

  • 相关阅读:
    wsdl和soap(简单使用TCPMon工具)03
    Django-7
    Django-6
    Django-5
    Django-4
    Django-3
    Django-2
    Django-1
    python_控制台输出带颜色的文字方法
    python网络编程
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/11628105.html
Copyright © 2020-2023  润新知