IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 对ant design vue 1.x 组件进行二次封装 -> 正文阅读

[JavaScript知识库]对ant design vue 1.x 组件进行二次封装

<a-table
      ref="tableElRef"
      v-bind="getBindValues" // 通过计算属性,获取父级传入的非prop属性
      :columns="columns"
      :data-source="virtualData" // 需要对原有属性进行二次改造,则设置prop
      @expand="expand" // 改造原有事件同理
      @expandedRowsChange="expandedRowsChange"
    >
      <!-- vue3版本适用 -->

      <!-- <template
        #[item]="data"
        v-for="item in Object.keys($slots)"
      >
        <slot
          :name="item"
          v-bind="data || {}"
        ></slot>
      </template> -->

      <template
        v-for="(i, name) in $scopedSlots"  // 通过该实例属性获取父级的插槽对象
        v-slot:[name]="text, record, index" // 动态插槽名 与 slot-scope属性
      >
        <slot
          :name="name"
          v-bind="{text, record, index}" // 绑定作用域
        ></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)

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

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

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:27:56  更:2022-03-22 20:32:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:35:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码