Vue中插槽几种类型的使用方法

478 阅读2分钟
插槽(slot)是什么

插槽(slot)是vue提出的一个概念,插槽用于决定将所携带的内容,插入到指定的某个位置,使得模块分块,具有模块化特质。如果template没有包含一个slot元素,之间的任何内容都会消失。

插槽(slot)的指令

指令为v-slot,它目前取代了slot和slot-scope,插槽内容,vue实例一套内容分发的api,将slot元素作为承载分发内容的出口。

使用插槽(slot)

在存在父子关系的组件中使用,我们可以在子组件中决定插槽的位置,同时子组件也可以给这些插槽的默认信息,当父组件中没有需要给子组件插槽插入信息时,显示的是子组件插槽定义的默认信息

插槽主要分为三种

默认插槽,具名插槽,作用域插槽

分别如何使用这三种

默认插槽的使用:

默认插槽:

<slot></slot>

在子组件中定义一个默认插槽:

<template>
  <div>
    <div class="center">{{ approve }}</div>
  </div>
</template>

<script>
export default {
  props: {
    approve: {
      type: String,
      required: true,
    },
  },
};
</script>

在父组件中显示出来:

<template>
<div>
    <hmHeader approve="默认插槽">
    </div>
</template>

父组件定义要插入到子组件的插槽的内容,并不一定是一个组件,也可以是普通的数据结构,只要子组件有定义插槽,就会把内容填充进去。

具名插槽的使用

具名插槽:

<slot name="名称"></slot>
什么叫具名插槽?

就是具有名字的插槽,名字通过属性name来定义,一个组件中可以有很多具名插槽。 在子组件中,定义具名插槽:

<template>
  <div>
    <div class="left">
      <slot name="left">具名插槽1</slot>
    </div>
    <div class="right">
      <slot name="right">具名插槽2</slot>
    </div>
  </div>
</template>

在父组件中显示出来:

<hmHeader>
      <template #left>
        具名插槽1
      </template>
      <template #right>
具名插槽2
      </template>
    </hmHeader>
作用域插槽的使用

作用域插槽:

<slot :自定义name=data中的属性或对象></slot>

通过上边的默认插槽和具名插槽的使用过程中,发现,基本都是父组件中决定要插入到子组件中的内容,而子组件自行决定插槽的位置。 在子组件中,定义具名插槽:

在子组件中,定义作用域插槽:

<template>
  <div class="test_solt">
    <p class="title">作用域插槽</p>
    <slot :obj='obj'>默认信息</slot>
  </div>
</template>

<script>
export default {
data () {
  return {
    obj: {
      msg:'我是msg',
      message:'我是message'
    }
  }
}
}
</script>

在父组件中显示出来:

<template>
  <div v-slot="slotProps">
   <template>
    <div>{{slotProps.obj.msg}}---{{slotProps.obj.message}}</div>
   </template>
  </div>
</template>