记录成长
分享知识

Vue 之 slot 插槽使用

首先我们来看看slot的用法实例:

单个 Slot
在子组件内使用特殊的<slot>元素就可以为这个子组件添加一个 slot (插槽),在父组件模板里,插入在子组件标签内的所有内容将替代子组件的<slot>标签及它的内容.示例代码如下:

子组件 child-component 的模板内定义一个 <slot> 元素,并且用一个 <p> 作为默认的内容,在父组件没有使用 slot 时,会渲染这段默认的文本;如果写入了 slot ,那就会替换整个 <slot>.所以上列渲染后的结果为:

注意:子组件<slot>内的备用内容,它的作用域时子组件本身.
具名 Slot
给 <slot> 元素指定一个 name 后可以分发多个内容,具名 Slot 可以与单个 Slot 共存,例如下面的示例:

子组件内声明了3个 <slot> 元素,其中在<div class=”main”>内的<slot> 没用使用 name 特性,它将作为默认 slot 出现,父组件没有使用 slot 特性的元素与内容都将出现在这里.
如果没有指定默认的匿名 slot, 父组件内多余的内容片段都将被抛弃.
上例最终渲染后的结果为:

如果你还没懂的话,接着我们再看一组例子

比如我们再定义一个panel组件

然后编译后,它会长成这模样:

在 Vue 中,一个组件内部可能会引用另外一个组件.也没什么大不了的.

比如,在定义一个图片组件.

它会长成这样子

两个组件(panel & img-panel)都是全局组件.

我希望在 panel 组件里 div.content 里使用 img-panel 组件来填充.

我可能会这么写.

两个组件强耦合了在一起,长这样:

现在问题来了

panel 组件的 div.content 这个部分,我是希望用内容填充的.
而不想管内容是什么.

但是这里的代码,我把 img-panel 组件写死到里面去了.
如果后期要换的话,我就得修改这里的代码.

slot 插槽

slot 插槽可以在组件的内容预留一个位置.类似于 placeholder.

在需要的使用,把你需要的任何内容填充进去.

于是,我在 panel里放几个 slot ,只管挖坑,不管填坑(但设置了默认值)

然后在使用这个 panel 组件时,把需要的坑填进去.
注意:我这里修改的是panel组件使用的位置,而不是定义的位置.

效果如下:

简单总结:

  • 在组件内部任意地方使用 <slot name='value'></slot> 标签挖坑.
  • 可以在其内部放置任意数据当成是默认值.{{title}} {{content}} {{bottom}}
    • 挖坑语法(组件定义): <slot name='slotname'>默认值</slot>
    • 填坑语法(组件使用): <div slot='slotname'>任意内容(字符串,数据,其他组件等)</div> .. 注意,使用的使用是里用 <div slot> 而不是 <slot>
  • 最重要的是,我们可以利用slot,事先不建立组件和组件之间的依赖关系,完全利用 slot 这个抽象层,把坑挖好即可.
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:外贸技术家园 » Vue 之 slot 插槽使用

分享到: 生成海报

热门文章

  • 评论 抢沙发

    • QQ号
    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活