vue中插槽,具名插槽及其缩写的使用

Posted 铁锤妹妹@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue中插槽,具名插槽及其缩写的使用相关的知识,希望对你有一定的参考价值。

什么是插槽< slot />

插槽是给组件预留的空间,当封装组件时往往会给组件使用插槽,插槽如何使用由父组件决定,插槽中的内容如果没有在该组件中插入其他任何内容,就默认显示插槽中的内容。
简单的来说就是将写在父组件里的内容插入到子组件里

需求: 在子组件中显示 ‘学习插槽’ 几个字

  1. 首先在父组件中引入Dialog子组件,并在中间写入内容
//这是父组件里的代码,引入子组件Dialog
<Dialog>
  <P>学习插槽</P>
</Dialog>
  1. 在子组件里确定在哪里使用显示
<template>
    <P>下面是插槽位置</P>
         //slot就是插入的地方
    <solt/>
</template>

这样的插槽很简单,但是只能插入一个地方,我要是想在不同的地方插入不同的内容,这就该使用具名插槽

什么是具名插槽?

具名插槽则是当子组件需要显示不同的效果时使用具名插槽,通过name属性给插槽命名,父组件向子组件具名插槽提供内容的时候中用v-slot:name的插槽名的形式提供内容。
简单点就是具名插槽就是带有名字的插槽,一个名字一个坑

table表格子组件:

  <template v-for="item in columns">
        <el-table-column
          v-if="item.slot"
          :min-width="item.width"
          :prop="item.prop"
          :label="item.label"
          :key="item.prop + 'slot'"
          :fixed="item.fixed"
        >
          <!-- 表格内容插槽自定义 -->
          <template #default="scope">
            <slot :row="scope.row" :name="item.slot" />
          </template>
        </el-table-column>
</template>

父组件

  1. 在向具名插槽提供内容的时候,我们可以在一个 <template> 元素上使用 v-slot指令,并以 v-slot 的参数的形式提供其名称,这个名称需要和子组件具名插槽name的名字保持一致
  2. 下面的#trading="scope"其实是v-slot的缩写
<mytable
      :columns="columns"
      :renderData="renderData"
      :loading="loading"
      :total="total"
      @handlePageChange="handlePageChange"
    >
      <template #trading="scope">
        {{ formatDateTen(scope.row.trading_time) }}
      </template>
      <template #add="scope">
        {{ formatDateTen(scope.row.add_time) }}
      </template>
      <template #update="scope">
        {{ formatDateTen(scope.row.update_time) }}
      </template>
    </mytable>
    <script>
import mytable from '@/components/table/index.vue'
export default {
  components: {
    mytable
  },
  data () {
    return {
      columns: [
        {
          prop: 'salesman_name',
          label: '业务名字',
          type: 'normal',
          width: '100px'
        },
        {
          prop: 'add_time',
          label: '添加时间',
          type: 'normal',
          slot: 'add',
          width: '120px'
        },
        {
          prop: 'trading_time',
          label: '交易时间',
          type: 'normal',
          slot: 'trading',
          width: '120px'
        },
        {
          prop: 'update_time',
          label: '更新时间',
          type: 'normal',
          slot: 'update',
          width: '120px'
        }
      ],
  
}
</script>

具名插槽的缩写

v-slot可以使用#代替,效果是一样的。例如 v-slot:add 可以被重写为 #add:

下面是vue官方文档在v-slot:没有值的情况下的处理方法

插槽与具名插槽以及嵌套插槽的使用
关于具名插槽网上案例比较好的案例

以上是关于vue中插槽,具名插槽及其缩写的使用的主要内容,如果未能解决你的问题,请参考以下文章

Vue系列之插槽(slot)详解

32 Vue插槽slot的默认值和具名插槽使用2

插槽Vue中插槽Slot基本使用和具名插槽

语法糖&具名插槽&作用域插槽&混入

Vue2.0—默认插槽具名插槽作用域插槽(二十四)

Vue2 插槽的使用默认插槽具名插槽作用域插槽