对ant design vue 1.x 组件进行二次封装

<a-table
      ref="tableElRef"
      v-bind="getBindValues" // 通过计算属性,获取父级传入的非prop属性
      :columns="columns"
      :data-source="virtualData" // 需要对原有属性进行二次改造,则设置prop
      @expand="expand" // 改造原有事件同理
      @expandedRowsChange="expandedRowsChange"
    >
      <template
          v-for="column in columns"
          :slot="column.scopedSlots?column.scopedSlots.customRender:''"
          slot-scope="text,record,index"
        >
          <slot
            :name="column.scopedSlots?column.scopedSlots.customRender:''"
            v-bind="{text, record, index}"
          ></slot>
        </template>

        <!-- 表头插槽 -->
        <template
          v-for="column in columns"
          :slot="column.slots?column.slots.title:''"
        >
          <slot :name="column.slots?column.slots.title:''"></slot>
        </template>

    </a-table>


// 通过计算属性获取父级attrs,作为table的props
  computed: {
    getBindValues () {
      return { ...this.$attrs }
    },
  },

使用

<WeTable
      :rowKey="record=>record.code"
      :specialKey="specialKey"
      :columns="columns"
      :data-source="list"
      :pagination="false"
      :scroll="{ y: 'calc(100vh - 200px)' }"
      size="small"
      bordered
    >
      <span
        slot="action"
        slot-scope="{ record }"
        class="flex justify-evenly text-blue-500"
      >
        <a-tooltip title="新增子级">
          <a-icon
            v-if="enum_type_code === 'TREE'"
            type="plus"
            @click="add(record)"
          />
        </a-tooltip>

        <a-tooltip title="编辑">
          <a-icon
            type="edit"
            @click="edit(record)"
          />
        </a-tooltip>

        <a-popconfirm
          :title="deleteTitle(record)"
          @confirm="remove(record)"
        >
          <a-tooltip title="删除">
            <a-icon type="delete" />
          </a-tooltip>
        </a-popconfirm>
      </span>
    </WeTable>

到这里你可能会发现,antd官方文档的表格插槽里面不是slot-scope="text, record"形式吗?

这是因为他的组件是使用渲染函数封装的,并不是模板,在渲染函数中是可以实现slot-scope传多个参数的,可以参考文档渲染函数的插槽部分

this.$scopedSlots.customRender(text, record, index)

但我这里的二次封装使用的模板

另外,如果对事件没有别的处理,可以直接使用$listener实例属性绑定事件

总之,要想清晰的完成一个组件的二次封装,实例属性必须要非常清楚

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值