zoukankan      html  css  js  c++  java
  • $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>
     

  • 相关阅读:
    程序员的进阶课-架构师之路(2)-数组
    程序员的进阶课-架构师之路(1)-数据结构与算法简介
    ASP.NET开发实战——(三)第一个ASP.NET应用《MyBlog》
    ASP.NET开发实战——(二)为什么使用ASP.NET
    ASP.NET开发实战——(一)开篇-用VS创建一个ASP.NET Web程序
    asp.net core 系列 12 选项 TOptions
    Linux编程 1 (文件系统路径说明, 目录结构说明)
    asp.net core 系列 9 三种运行环境和IIS发布
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 4 注入服务的生存期
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/11628105.html
Copyright © 2011-2022 走看看