Vue学习笔记:Slot

转自:https://www.w3cplus.com/vue/vue-slot.html

在Vue中,slot也分多种,从Vue的官网中可以获知,其主要分为:单个插槽具名插槽作用域插槽三种

  • 父组件的内容是在父组件作用域编译,子组件的内容是在子组件作用域编译
  • Vue的slot一般用在父组件向子组件分发内容,该内容的编译作用域名为父组件作用域。
  • 父组件分发内容给子组件,子组件需要一个标签进行接收,分发和接收同时才能真正实现分发

如果子组件template中没有包含任何一个时,就算父组件分发再多的内容也将会被丢弃。只有子组件模板只要有一个没有属性的slot(因为在模板中可以有多个带属性的slot,后面的内容会介绍),父组件传入的整个内容片段将插入到slot所在的DOM位置,并将替换掉slot本身。

最初在中的任何内容都被视为备用内容(也可以在最初的中不放置任何默认内容)。备用内容在子组件的作用域内编译,并且只有在宿主元素(父组件没有分发任何内容)为空,且没有要插入的内容时才显示备用内容。

单个插槽

子组件中使用一个默认的接收分发的所有内容。

具名插槽

可以用一个特殊的属性name来进一步配置父组件如何分发内容。多个插槽可以有不同的名字。具名插槽将匹配内容片段中有对应slot特性的元素。

仍然可以有一个匿名插槽,它是默认插槽,作为找不到匹配的内容片段的备用插槽。如果没有默认插槽,这些找不到匹配的内容片段将被抛弃。

//子组件根据名称接收分发的内容
    

  父组件根据slot名称进行分发的


作用域插槽

作用域插槽是一种特殊类型的插槽,用作一个(能被传递数据的)可重用模板,来代替已经渲染好的元素。

在子组件中,只需将数据传递到插槽,就像你将prop传递给组件一样:

 

在父级中,具有特殊特性 slot-scope 的