@芥末的糖-----父子组件优雅传递信息

1.slot组件分发

  1. 默认情况
<div id="root">
        <children>
            <div>父组件</div>//不会显示
        </children>
</div>
<script>
    var vm = new Vue({
        el:"#root",
        components:{
            children:{
                template:'<span>子组件</span>'
            }
        }
    })
</script>
-----------------------------------------
//页面显示:子组件

2.单个slot

<body>
    <div id="root">
        <children>
            <div>父组件</div>
        </children>
    </div>
</body>
</html>
<script>
    var vm = new Vue({
        el:"#root",
        components:{
            children:{
                template:'<span><slot></slot>子组件</span>'
            }
        }
    })
</script>
---------------------------------------------
//页面显示:父组件 子组件

3.具名slot

<body>
    <div id="root">
        <children>
            <div slot="goFirst">父组件1</div>
            <div slot="goSecond">父组件2</div>
        </children>
    </div>
</body>
</html>
<script>
    var vm = new Vue({
        el:"#root",
        components:{
            children:{
                template:'<span><slot name="goFirst"></slot>子组件
                      <slot name="goSecond"></slot></span>'
            }
        }
    })
</script>
</script>
---------------------------------------------------------
//页面显示:父组件1 子组件 父组件2

4.作用域

<body>
   <div id="root">
       <children>
           <div slot="goFirst" @click='toclick'>父组件  
11</div>
           <div slot="goSecond">父组件2</div>
       </children>
   </div>
</body>
</html>
<script>
   var vm = new Vue({
       el:"#root",
       methods:{
           toclick(){
               console.log(1);
           }
       },
       components:{
           children:{
               template:'<span><slot name="goFirst"></slot>子组件<slot name="goSecond"></slot></span>'
           }
       }
   })
</script>
//父组件作用域内点击时才有用

!父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内编译。

5.没有内容分发时

<body>
    <div id="root">
        <children>
            <div slot="goFirst" @click='toclick'>父组件1</div>
            <!-- <div slot="goSecond">父组件2</div> -->
        </children>
    </div>
</body>
</html>
<script>
    var vm = new Vue({
        el:"#root",
        methods:{
            toclick(){
                console.log(1);
            }
        },
        components:{
            children:{
                template:'<span><slot name="goFirst">显示内容1</slot>子组件<slot name="goSecond">显示内容2</slot></span>'
            }
        }
    })
</script>
--------------------
//页面显示:父组件1 子组件 显示内容2

总结

革命尚未成功,同志仍需努力!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容