Vue组件之slot插槽

vue里提供了一种将父组件的内容和子组件的模板整合的方法:内容分发,通过slot插槽来实现。

匿名插槽

父组件使用子组件时,在子组件标签内部编写内容,子组件内部可以使用来接收传入的内容,插槽可以设置默认内容,当无内容传入时使用默认内容

<!-- SlotTest.vue -->
<template>
  <div>
    下面是solt接收到的值:
    <slot>default data</slot>
  </div>
</template>

在父组件中直接使用子组件,没有传入数据

<template>
  <div>
    <slot-test>
        <!-- data from father -->
    </slot-test>
  </div>
</template>

可以看到渲染子组件的时候使用了默认值

image-20200830082115158

然后将子组件中加入数据,子组件中渲染了父组件中传入的数据

image-20200830082315265

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

意思是:通过这种方式传递的参数(data=”slot data”),只能在子组件中访问到(通过props接收),父组件中是访问不到的

具名插槽

当组件中需要多个插槽时,使用匿名插槽会非常不方便

标签有一个name属性,用来定义额外插槽,具名插槽中的内容使用