Vue 3.0学习笔记之 插槽

#插槽内容

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

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

  1. Add todo

然后在  的模板中,你可能有:

当组件渲染的时候,将会被替换为“Add Todo”。

  1. Add todo

不过,字符串只是开始!插槽还可以包含任何模板代码,包括 HTML:

  1. Add todo

或其他组件

  1. Add todo

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

  1. Create a new item

  1. Add todo

#渲染作用域

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

  1. Delete a {{ item.name }}

该插槽可以访问与模板其余部分相同的实例 property (即相同的“作用域”)。

Vue 3.0学习笔记之 插槽_第1张图片

插槽不能访问  的作用域。例如,尝试访问 action 将不起作用:

  1. Clicking here will {{ action }} an item

作为一条规则,请记住:

父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

#后备内容

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

我们可能希望这个 

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

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


  1. Submit

但是如果我们提供内容:


  1. Save

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


  1. Save

#具名插槽

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

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

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

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