Vue3中Slot插槽透?jìng)?二次封裝Arco的table組件詳解
Vue3中Slot插槽透?jìng)?二次封裝Arco的table組件
Vue3 插槽透?jìng)?/h3>
需求是這樣, 對(duì)acro的table表格進(jìn)行二次封裝。
封裝成一個(gè) <SearchTable>
組件。要求二次封裝的組件可以將slot透?jìng)鹘o原生的table組件。
如下這樣,將SearchTable
中的插槽透?jìng)鹘o <a-table>
<SearchTable :search-model="searchModel" :table-cols="cols" :table-data="tableData" :pagination="pagination" @search="searchTableAction" > <template #channelCode="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }} - {{ column }} </template> <template #channelName="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }}- {{ column }} </template> <template #status="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }}- {{ column }} </template> </SearchTable>
一共有下面幾個(gè)字段:
const cols = [ { title: '渠道編碼', dataIndex: 'channelCode', slotName: 'channelCode', }, { title: '渠道名稱', dataIndex: 'channelName', slotName: 'channelName', }, { title: '狀態(tài)', dataIndex: 'status', slotName: 'status', }, ];
步驟
首先我們先明白原組件的使用。
arco
中的table組件, 當(dāng)定義了插槽就渲染插槽。當(dāng)沒(méi)有定義的時(shí)候就正常顯示table表格中的數(shù)據(jù)。
因?yàn)槲覀円獙?duì)table組件進(jìn)行二次封裝,所以我們要將table中的插槽透?jìng)鞒鋈?。下面是?shí)現(xiàn)原理。
1. 知道父組件傳遞了一個(gè)slot
這里我們要用一個(gè)vue3中的API,useSlots()
, 我們要用這個(gè)api來(lái)判斷父組件是否傳遞了插槽。
- 從slots中獲取父組件傳的插槽信息,如果沒(méi)有則就使用
arco
中默認(rèn)的。即正常展示。當(dāng)自定義了插槽, 就選擇插槽的內(nèi)容。 - 插槽的參數(shù)傳遞是
v-slot:[key]="{ record, rowIndex, column }"
這里的參數(shù)是arco
中傳遞的。 - 然后我們?cè)谕競(jìng)鹘o我們的自己的插槽。
:name="key" v-bind="{ rowIndex: rowIndex, record: record, column: column }"
<template> <a-table row-key="id" :loading="loading" :pagination="pagination" :columns="(cloneColumns as TableColumnData[])" :data="tableData" :bordered="false" :size="size" @page-change="onPageChange" > <!-- key 就是 slotName--> <template v-for="(item, key, i) in slots" :key="i" v-slot:[key]="{ record, rowIndex, column }" > <slot :name="key" v-bind="{ rowIndex: rowIndex, record: record, column: column }" ></slot> </template> </a-table> </template> <script lang="ts" setup> import { useSlots, } from 'vue'; const slots = useSlots(); </script>
2. 父組件使用
<SearchTable :search-model="searchModel" :table-cols="cols" :table-data="tableData" :pagination="pagination" @search="searchTableAction" > <template #channelCode="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }} - {{ column }} </template> <template #channelName="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }}- {{ column }} </template> <template #status="{ record, rowIndex, column }"> {{ record }} - {{ rowIndex }}- {{ column }} </template> </SearchTable>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)動(dòng)態(tài)表格提交參數(shù)動(dòng)態(tài)生成控件的操作
這篇文章主要介紹了vue實(shí)現(xiàn)動(dòng)態(tài)表格提交參數(shù)動(dòng)態(tài)生成控件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11vue如何實(shí)現(xiàn)拖動(dòng)圖片進(jìn)行排序Vue.Draggable
這篇文章主要介紹了vue如何實(shí)現(xiàn)拖動(dòng)圖片進(jìn)行排序Vue.Draggable,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04element-ui中table組件的toggleRowSelection()方法使用
這篇文章主要介紹了element-ui中table組件的toggleRowSelection()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03從零開(kāi)始在NPM上發(fā)布一個(gè)Vue組件的方法步驟
這篇文章主要介紹了從零開(kāi)始在NPM上發(fā)布一個(gè)Vue組件的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Vue3全局屬性app.config.globalProperties的實(shí)現(xiàn)
Vue3中的app.config.globalProperties是一個(gè)強(qiáng)大的全局配置功能,允許我們?cè)趹?yīng)用級(jí)別設(shè)置和訪問(wèn)屬性,本文主要介紹了Vue3全局屬性app.config.globalProperties的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01vue3?element-plus?實(shí)現(xiàn)表格數(shù)據(jù)更改功能詳細(xì)步驟
這篇文章主要介紹了vue3 element-plus實(shí)現(xiàn)表格數(shù)據(jù)更改功能,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Vue中使用定時(shí)器(setInterval、setTimeout)的兩種方式
js中定時(shí)器有兩種,一個(gè)是循環(huán)執(zhí)行?setInterval,另一個(gè)是定時(shí)執(zhí)行?setTimeout,這篇文章主要介紹了Vue中使用定時(shí)器?(setInterval、setTimeout)的兩種方式,需要的朋友可以參考下2023-03-03