插槽
在VUE开发项目的过程中,插槽
是重要的承载分发内容的出口。基本使用如下:
- 在父组件中引入子组件,并在引入子组件的标签中包裹需要传递给子组件
的内容:内容何以时字符串、模板代码,甚至组件; - 在子组件中要包含插槽
,否则父组件带传递的内容将不会传递; - 当组件渲染的时候,
将会被替换为“插槽内容:字符串、模板代码、组件”:
// 父组件
// 子组件模板
效果:
注意:
- 此处插槽传递的内容可以是父级模板里作用域的所有内容,即父级模板的内容都是在父级作用域编译,同样,子模板里内容也都是在子作用域中编译的,两者互不掺联。
备用内容
在插槽使用过程中,可以在子组件中插槽设置备用、默认的内容 我是备用内容
,只在没有提供插槽内容的时候渲染。
// 父组件模板替换插槽默认内容
// 子组件模板我是备用内容
效果:
具名插槽
在需要多个插槽并分别给不同插槽传递不同内容时,解决办法:
- 给子模板
设置name
属性; - 给父组件使用
template
包裹待传递内容,并添加v-slot
属性,属性值与子模版
的name
属性对应值。
// 父组件模板
I'm header Title
I'm a paragraph for the main content.
I'm footer
// 子组件模板
// 一个不带 `name` 的 `` 出口会带有隐含的名字“default”。
效果:
注意,v-slot
只能添加在
上
具名插槽的缩写
v-slot:
可以简写为#
,v-slot:header
→#header
I'm header Title
I'm a paragraph for the main content.
I'm footer
注意:在使用缩写时,必须确定#
后有参数,否则会致使语法失效触发警告。
🍎 {{index}}---{{item}}
如果没有参数仍然希望使用缩写,必须始终以明确插槽名取而代之:
🍎 {{index}}---{{item}}
作用域插槽:
在插槽内容访问子组件中才有的数据,并对在父模板中对插槽内容自定义时,作用域插槽就有了永无之地。
// 父组件模板// 在父级作用域中,我们可以使用带值的 v-slot 来定义我们提供的插槽 prop 的名字:// 这里把包含所有插槽 prop 的对象命名为:slotProps🍎 {{ slotProps.index }}-{{ slotProps.item }}
// 子组件模板
- // 根据自己的需要将很多的 attribute 绑定到 slot 上// 绑定在 元素上的 attribute 被称为插槽 prop。