|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2018-10-25 15:38 编辑
上一讲我们通过v-model实现了组件通信,本次学习slot机制。
在开始前,我们随便看一个网页布局:
这个网页由一级导航,二级导航,轮播图,内容区,底部信息5个区域组成,如果要写成组件话。
基本样子:
- <app>
- <menu-main></menu-main>
- <menu-sub></menu-sub>
- <menu-bar></menu-bar>
- <div class="container">
- <container></container>
- </div>
- <app-footer></app-footer>
- </app>
复制代码
肯定会需要组件之间的相互组合,例如导航变化,内容区域也跟着变化。
上述过程就可以混合父组件的内容与子组件的模板,简称:内容分发(transclusion)。
那么就要用到slot了,以<app>为例,有两个显著的特点:
1、<app>组件不知道它的挂载点会有什么内容,挂载点的内容是由<app>的父组件决定。
2、<app>组件有可能有自己的模板。
结合之前学的props传递数据、events触发事件、slot内容分发就构成了Vue组件的3个API来源。
正式介绍slot之前,还需要了解一个概念,编译的作用域。
例如在父组件中有如下的模板:
- <child-component>
- {{message}}
- </child-component>
复制代码
这里的message就是一个slot,但是它绑定的是父组件的数据,而不是组件<child-component>的数据。
父组件模板的内容是在父组件作用域内编译,子组件模板的内容是在子组件作用域内编译。
代码示例:
- <div id="myApp">
- <child-component v-show="showChild"></child-component>
- </div>
- <script>
- Vue.component('child-component',{
- templates:'<div>子组件</div>'
- });
- var app = new Vue({
- el:'#myApp',
- data:{
- showChild:true
- }
- })
- </script>
复制代码
这里的showChild绑定的是父组件的数据,如果想在子组件上绑定,那应该是:
- Vue.component('child-component',{
- templates:'<div v-show="showChild">子组件</div>',
- data:function(){
- return{
- showChild:true
- }
- }
- });
- var app = new Vue({
- el:'#myApp'
- })
复制代码
因此,slot分发的内容,作用域是在父组件上的。
课后作业
1、Vue组件的3个API来源有什么?
2、下列代码中message绑定的是<child-componet>的数据(T/F)
- <child-component>
- {{message}}
- </child-component>
复制代码
答案:
如果有收获,别忘了评分 :
这位鱼油,如果喜欢Vue,请订阅 专辑( 传送门)( 不喜欢更要订阅 )
|
|