鱼C论坛

 找回密码
 立即注册
查看: 1360|回复: 3

[庖丁解牛] 032 V slot的两种用法

[复制链接]
发表于 2018-10-26 16:15:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2018-10-27 11:13 编辑


                               
登录/注册后可看大图


上一讲我们介绍了slot的定义,本次学习两种常见的slot用法。

在子组件内使用特殊的<slot>元素就可以为这个子组件开启一个slot(插槽)。

在父组件模板里,插入子组件标签内的所有内容将替代子组件的<slot>标签及它的内容。

很好理解,用代码演示下:
  1. <div id="myApp">
  2.     <child-component>
  3.         <p>分发的内容</p>
  4.         <p>更多分发的内容</p>
  5.     </child-component>
  6. </div>

  7. <script>
  8.     Vue.component('child-component',{
  9.         template:'\
  10.         <div>\
  11.         <slot>\
  12.         <p>如果父组件没有插入的内容,在下将作为默认出现</p>\
  13.         </slot>\
  14.         </div>'
  15.     });

  16.     var app = new Vue({
  17.         el:"#myApp"
  18.     })
  19. </script>
复制代码

Snip20181027_22.png


子组件child-component的模板内定义了一个<slot>元素,并且用一个<p>作为默认的内容。

在父组件没有使用slot时,会渲染这段默认的文本。

如果写入了slot,便会替代整个<slot>,渲染结果为:
  1. <div id="myApp">
  2.     <div>
  3.         <p>分发的内容</p>
  4.         <p>更多分发的内容</p>
  5.     </div>
  6. </div>
复制代码


注意,子组件<slot>内的备用内容,它的作用域是子组件本身。




具名Slot

给slot元素指定一个name后就可以分发多个内容,具名Slot可以和单个Slot共存。

代码示例:
  1. <div id="myApp">
  2.     <child-component>
  3.         <h1 slot="header">我是标题</h1>
  4.         <p>分发的内容</p>
  5.         <p>更多分发的内容</p>
  6.         <div slot="footer">底部信息</div>
  7.     </child-component>
  8. </div>

  9. <script>
  10.     Vue.component('child-component',{
  11.         template:'\
  12.         <div class="container">\
  13.             <div class="header">\
  14.                 <slot class="header"></slot>\
  15.             </div>\
  16.             <div class="main">\
  17.             <slot></slot>\
  18.             </div>\
  19.             <div>\
  20.             <slot name="footer"></slot>\
  21.             </div>\
  22.         </div>'
  23.     });

  24.     var app = new Vue({
  25.         el:"#myApp"
  26.     })
  27. </script>
复制代码

Snip20181027_25.png


子组件内声明了3个slot元素,其中在:
  1. <div class="main">
复制代码


内部的slot没有使用name特性,将作为默认的slot出现,父组件没有使用slot特性的元素与内容将出现在这里。

如果没有指定默认的匿名slot,父组件多余的内容片段都将被抛弃。

上例最终渲染结果:
  1. <div class="container">
  2.     <div class="header"><p>分发的内容</p>
  3.         <p>更多分发的内容</p></div>
  4.     <div class="main"><p>分发的内容</p>
  5.         <p>更多分发的内容</p></div>
  6.     <div>
  7.         <div>底部信息</div>
  8.     </div>
  9. </div>
复制代码






课后作业


1、在子组件内使用特殊的<slot>元素就不可以为这个子组件开启一个slot(插槽)。(T/F)




答案:
游客,如果您要查看本帖隐藏内容请回复





如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢Vue,请订阅 专辑传送门)(不喜欢更要订阅



                               
登录/注册后可看大图

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 16:34:59 | 显示全部楼层
1.F
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-21 23:33:13 | 显示全部楼层
0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-1 21:45:58 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表