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: '渠道名稱(chēng)',
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中@click綁定事件點(diǎn)擊不生效的原因及解決方案
根據(jù)Vue2.0官方文檔關(guān)于父子組件通訊的原則,父組件通過(guò)prop傳遞數(shù)據(jù)給子組件,子組件觸發(fā)事件給父組件,這篇文章主要介紹了vue中@click綁定事件點(diǎn)擊不生效的解決方案,需要的朋友可以參考下2022-12-12
前端vue2+js+springboot實(shí)現(xiàn)excle導(dǎo)入優(yōu)化解決方案
這篇文章主要介紹了前端vue2+js+springboot實(shí)現(xiàn)excle導(dǎo)入優(yōu)化的相關(guān)資料,前端優(yōu)化包括使用ElementUI組件和封裝的JS解析函數(shù),后端重點(diǎn)在于多線程處理,通過(guò)定義線程安全技術(shù)及數(shù)據(jù)分片實(shí)現(xiàn)高效導(dǎo)入,需要的朋友可以參考下2025-11-11
Vue使用v-model收集各種表單數(shù)據(jù)、過(guò)濾器的示例詳解
這篇文章主要介紹了Vue使用v-model收集各種表單數(shù)據(jù)、過(guò)濾器的示例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
vue中的v-show,v-if,v-bind的使用示例詳解
這篇文章主要介紹了vue中的v-show,v-if,v-bind的使用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
vue+openlayers+nodejs+postgis實(shí)現(xiàn)軌跡運(yùn)動(dòng)效果
使用postgres(postgis)數(shù)據(jù)庫(kù)以及nodejs作為后臺(tái),vue和openlayers做前端,openlayers使用http請(qǐng)求通過(guò)nodejs從postgres數(shù)據(jù)庫(kù)獲取數(shù)據(jù),這篇文章主要介紹了vue+openlayers+nodejs+postgis實(shí)現(xiàn)軌跡運(yùn)動(dòng),需要的朋友可以參考下2024-05-05
Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)el-select組件的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)el-select組件的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的的可以參考一下2023-02-02
vue+Element實(shí)現(xiàn)分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了vue+Element實(shí)現(xiàn)分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue3實(shí)現(xiàn)列表無(wú)限滾動(dòng)的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Vue3實(shí)現(xiàn)列表無(wú)限滾動(dòng)的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-07-07

