VUE-插槽(slot)

目录

1.插槽内容

2.编译作用域

3.后备内容

4.具名插槽

5.作用域插槽

5.1 独占默认插槽的缩写语法

5.2 解构插槽Prop

6.动态插槽名

7.具名插槽的缩写

8.其它示例

9.废弃了的语法

9.1 带有slot attribute的具名插槽

9.2 带有slot-scope  attribute的作用域插槽


1.插槽内容

Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 元素作为承载分发内容的出口。

它允许你像这样合成组件:


  Your Profile

然后你在 的模板中可能会写为:


  

当组件渲染的时候, 将会被替换为“Your Profile”。插槽内可以包含任何模板代码,包括 HTML:


  
  
  Your Profile

甚至其它的组件:


  
  
  Your Profile

如果 template没有包含一个 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃。

2.编译作用域

当你想在一个插槽中使用数据时,例如:


  Logged in as {{ user.name }}

该插槽跟模板的其它地方一样可以访问相同的实例 property (也就是相同的“作用域”),而不能访问 的作用域。例如 url 是访问不到的:


  Clicking here will send you to: {{ url }}
  

作为一条规则,请记住:父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

3.后备内容

有时为一个插槽设置具体的后备 (也就是默认的) 内容是很有用的,它只会在没有提供内容的时候被渲染。例如在一个 组件中:

我们可能希望这个

现在当我在一个父级组件中使用 并且不提供任何插槽内容时:

后备内容“Submit”将会被渲染:

但是如果我们提供内容:

  Save

则这个提供的内容将会被渲染从而取代后备内容:

4.具名插槽

自 2.6.0 起有所更新。已废弃的使用 slot attribute 的语法在这里。

有时我们需要多个插槽。例如对于一个带有如下模板的 组件:

对于这样的情况, 元素有一个特殊的 attribute:name。这个 attribute 可以用来定义额外的插槽:

一个不带 name 出口会带有隐含的名字“default”。

在向具名插槽提供内容的时候,我们可以在一个