Vue实现了一套内容分发的API,将 <slot> 元素作为承载分发内容的出口。
匿名插槽
一个不带name的
示例:
组件模板如下<a v-bind:href="url" class="nav-link"><slot></slot></a>
在父组件中使用如下<nav-link url="/profile">Your Profile</nav-link>
当组件渲染的时候
如果组件模板的template中没有包含
具名插槽
<div class="container"><header><slot name="header">``</slot></header><main><slot></slot></main><footer><slot name="footer">``</slot></footer></div>
在父组件中使用<base-layout><template v-slot:header><h1>Here might be a page title</h1></template><p>A paragraph for the main content.</p><p>And another one.</p><template v-slot:footer><p>Here's some contact info</p></template></base-layout>
元素中的内容都会被传入到相应插槽,任何没有被包裹在带有 当使用组件的父组件不提供内容时,后备内容会被渲染 在父组件中使用user.age并不能访问到 规则:父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。 作用域插槽可以解决父组件无法访问到子组件数据的问题v-slot 的 <template> 中的内容都会被视为默认插槽的内容
后备内容
<a v-bind:href="url"><slot>我是后备内容</slot></a>
在父组件模板使用如下<nav-link></nav-link>
这种情况下后备内容就会被渲染
或如下<nav-link>Your Profile</nav-link>
这种情况后备内容就不会被渲染,取而代之的是”Your Profile”被渲染编译作用域
<span><slot>{{user.name}}</slot>
在父组件中使用如下<current-user>{{user.age}}</current-user><current-user>组件内部的user.age
**
作用域插槽
绑定在 <slot> 元素上的 attribute 被称为插槽 prop<span><slot ``v-bind:dataForParent="user"``>{{user.name}}</slot>
在父组件中使用如下<current-user><template ``v-slot:default="slotProps"``>{{``slotProps.dataForParent.age``}}</template></current-user>
“slotProps“可以用任意字符串替代
