vue动态组件-插槽

1,056 阅读2分钟

vue组件进阶-插槽

什么是插槽

  1. 组件通过插槽传入自定义结构。
  2. 用于实现组件的内容分发,通过slot标签,可以接收到写在组件标签内的内容。
  3. vue提供组件插槽能力,允许开发者在封装组件时,把不确定的定义为插槽。

插槽分为三种:默认插槽、具名插槽和作用域插槽

默认插槽

格式
在定义组件时,在template中用slot来占个坑;
使用时,将组件之间的内容来填坑;

Snipaste_2022-05-10_19-18-27.png

具名插槽

使用背景:当一个组件内有两处以上需要外部传入标签的地方

格式

定义:<slot name="xxx">
使用:

  • <template #xxx> </template>;
  • <template v-slot:xxx> </template> 两种方法取其一即可

图示:

Snipaste_2022-05-10_19-25-07.png

1.传入的标签可以分别派发给不同的slot位置。
2. v-slot一般跟template标签使用。(template是html5新出标签内容模板元素,不会渲染到页面上,一般被vue内部解析为内部标签)

小结

  1. slot有可以设置多个。
  2. 定义组件时:slot的name属性起插槽名。
  3. 使用组件时,template配合#插槽名传入具体html标签或组件。

作用域插槽

作用背景: 子组件中的数据,在给插槽赋值时在父组件环境下使用(子数据传入父组件)

步骤

  • 创建子组件, 准备slot, 在slot上绑定属性和子组件值。
  • 使用子组件, 传入自定义标签, 用template和v-slot="自定义变量名"。
  • 自定义变量名会自动绑定slot上所有属性, 就可以使用子组件内值, 并替换slot位置。 图示:

Snipaste_2022-05-10_19-41-48.png 小结
组件内变量绑定在slot上, 然后使用组件v-slot:插槽名字="变量" ,变量上就会绑定slot传递的属性和值