创新互联VUE3教程:Vue3.0插槽

该页面假设你已经阅读过了组件基础。如果你还对组件不太了解,推荐你先阅读它。

目前成都创新互联已为上千多家的企业提供了网站建设、域名、网页空间、网站运营、企业网站设计、获嘉网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

#插槽内容

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

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


  Add todo

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


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


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


  
  
  Add todo

或其他组件


    
  
  Add todo

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





  
  Add todo

#渲染作用域

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


  Delete a {{ item.name }}

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

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


  Clicking here will {{ action }} an item
  

作为一条规则,请记住:

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

#后备内容

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

我们可能希望这个

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

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

但是如果我们提供内容:


  Save

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

#具名插槽

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

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

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

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