|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2018-10-27 11:13 编辑
上一讲我们介绍了slot的定义,本次学习两种常见的slot用法。
在子组件内使用特殊的<slot>元素就可以为这个子组件开启一个slot(插槽)。
在父组件模板里,插入子组件标签内的所有内容将替代子组件的<slot>标签及它的内容。
很好理解,用代码演示下:
- <div id="myApp">
- <child-component>
- <p>分发的内容</p>
- <p>更多分发的内容</p>
- </child-component>
- </div>
- <script>
- Vue.component('child-component',{
- template:'\
- <div>\
- <slot>\
- <p>如果父组件没有插入的内容,在下将作为默认出现</p>\
- </slot>\
- </div>'
- });
- var app = new Vue({
- el:"#myApp"
- })
- </script>
复制代码
子组件child-component的模板内定义了一个<slot>元素,并且用一个<p>作为默认的内容。
在父组件没有使用slot时,会渲染这段默认的文本。
如果写入了slot,便会替代整个<slot>,渲染结果为:
- <div id="myApp">
- <div>
- <p>分发的内容</p>
- <p>更多分发的内容</p>
- </div>
- </div>
复制代码
注意,子组件<slot>内的备用内容,它的作用域是子组件本身。
具名Slot
给slot元素指定一个name后就可以分发多个内容,具名Slot可以和单个Slot共存。
代码示例:
- <div id="myApp">
- <child-component>
- <h1 slot="header">我是标题</h1>
- <p>分发的内容</p>
- <p>更多分发的内容</p>
- <div slot="footer">底部信息</div>
- </child-component>
- </div>
- <script>
- Vue.component('child-component',{
- template:'\
- <div class="container">\
- <div class="header">\
- <slot class="header"></slot>\
- </div>\
- <div class="main">\
- <slot></slot>\
- </div>\
- <div>\
- <slot name="footer"></slot>\
- </div>\
- </div>'
- });
- var app = new Vue({
- el:"#myApp"
- })
- </script>
复制代码
子组件内声明了3个slot元素,其中在:
内部的slot没有使用name特性,将作为默认的slot出现,父组件没有使用slot特性的元素与内容将出现在这里。
如果没有指定默认的匿名slot,父组件多余的内容片段都将被抛弃。
上例最终渲染结果:
- <div class="container">
- <div class="header"><p>分发的内容</p>
- <p>更多分发的内容</p></div>
- <div class="main"><p>分发的内容</p>
- <p>更多分发的内容</p></div>
- <div>
- <div>底部信息</div>
- </div>
- </div>
复制代码
课后作业
1、在子组件内使用特殊的<slot>元素就不可以为这个子组件开启一个slot(插槽)。(T/F)
答案:
如果有收获,别忘了评分 :
这位鱼油,如果喜欢Vue,请订阅 专辑( 传送门)( 不喜欢更要订阅 )
|
|