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

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

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

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

ps: 这个特性使用起来非常方便,比如添加一些 icon 之类的。

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

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

插槽不能访问 的作用域。

作为一条规则,请记住:

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

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

例如在一个 组件中:

我们可能希望这个 内绝大多数情况下都渲染文本“Submit”。

为了将“Submit”作为后备内容,我们可以将它放在 标签内:

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

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

例如对于一个带有如下模板的 组件:

对于这样的情况, 元素有一个特殊的 attribute:name。

这个 attribute 可以用来定义额外的插槽:

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

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

现在