vue+element-ui表格自定義列模版的實現(xiàn)
前言
日前vue3項目中用element-ui表格封裝一個組件,有自定義表列格式的需求,做完后順手總結(jié)一下
一、為什么要自定義表列模版?
后端返回的數(shù)據(jù)往往比較原始,比如狀態(tài)是數(shù)值,而我們要給它轉(zhuǎn)成中文并用不同顏色標(biāo)記,這種場景很常見
二、實現(xiàn)步驟
1.封裝表格組件
代碼如下(示例):
通過插槽v-slots實現(xiàn)
// data-table/index.tsx
import { ElPagination, ElTable, ElTableColumn } from "element-plus";
import { PropType, defineComponent } from "vue";
const props = {
tableStyle: {
type: String as PropType<string>,
default: 'height: 150px;overflow-y: auto'
},
showHeader: {
type: Boolean as PropType<boolean>,
default: true
},
tableData: {
type: Array
},
columns: {
type: [Array, Object]
},
pagination: {
type: Object,
default: () => ({
total: 0,
page: 1,
limit: 20,
background: true,
pageSizes: [10, 20, 30, 50],
pagerCount: document.body.clientWidth < 992 ? 5 : 7,
layout: '->, total, sizes, prev, pager, next, jumper',
})
}
}
export default defineComponent({
name: 'data-table',
props,
setup(props) {
const defaultBackground = true
const defaultPageSizes = [10, 20, 30, 50]
const defaultPagerCount = document.body.clientWidth < 992 ? 5 : 7
const defaultLayout = '->, total, sizes, prev, pager, next, jumper'
return () => (
<>
<div style={ props.tableStyle }>
<ElTable v-show={ props.tableData?.length>0 } showHeader={ props.showHeader } v-model:data={ props.tableData } style={{width: '100%'}}>
{props.columns?.map((item) => (
<ElTableColumn
key={ item.key? item.key:item }
prop={ item.prop? item.prop:item }
label={ item.label? item.label:item }
sortable={ item.sortable }
v-slots={{
default: (scope) => item.render? item.render(scope.row):undefined
}}
/>
))}
</ElTable>
<ElPagination
v-show={ props.pagination.total>0 }
small
total={ props.pagination.total }
background={ props.pagination.background || defaultBackground }
pageSizes={ props.pagination.pageSizes || defaultPageSizes }
pagerCount={ props.pagination.pagerCount || defaultPagerCount}
layout={ props.pagination.layout || defaultLayout }/>
</div>
</>
)
}
})
2.父組件引用
代碼如下(示例):
在columns中提供render
// parentComponent
export default defineComponent({
name: 'parent',
setup() {
const columns = [
{key: 'type', prop: 'type', label: 'type', render: (row) => <ElTag>{ row.type }</ElTag>},
{key: 'parseTrue', prop: 'parseTrue', label: 'parseTrue', render: (row) => {
return row.parseTrue? <ElTag type='success'>語法正確</ElTag> : <ElTag type='danger'>語法錯誤</ElTag>
}},
{key: 'explainTrue',prop: 'explainTrue', label: 'explainTrue', render: (row) => {
return row.explainTrue? <ElTag type='success'>邏輯正確</ElTag> : <ElTag type='danger'>邏輯錯誤</ElTag>
}},
{key: 'explainTime', prop: 'explainTime', label: 'explainTime'},
{key: 'sql', prop: 'sql', label: 'sql'}
]
const tableData = ref([])
const total = ref(0)
return () => (
<>
<DataTable
tableStyle='height: 500px;overflow-y: auto'
showHeader={ false }
columns={ columns }
tableData={ tableData.value }
pagination={{
total: total.value
}}
/>
</>
)
}
})
兩步就好,不多不少。
總結(jié)
通過插槽完美解決了element-ui表格自定義列模版的問題,可能還會有更復(fù)雜的場景,待遇到時再具體分析。
到此這篇關(guān)于vue+element-ui表格自定義列模版的實現(xiàn)的文章就介紹到這了,更多相關(guān)element表格自定義列模版內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+elementPlus中 樹形控件封裝的實現(xiàn)
本文主要介紹了Vue3+elementPlus中 樹形控件封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
從零搭建一個vite+vue3+ts規(guī)范基礎(chǔ)項目(搭建過程問題小結(jié))
這篇文章主要介紹了從零搭建一個vite+vue3+ts規(guī)范基礎(chǔ)項目,本項目已vite開始,所以按照vite官方的命令開始,對vite+vue3+ts項目搭建過程感興趣的朋友一起看看吧2022-05-05
vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件
這篇文章主要為大家詳細介紹了vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
vue3?組合式api中?ref?和$parent?的使用方法
vue3中, 在 組件中添加一個 component ref=“xxx” ,就可以在父組件中得到 子組件的 dom 對象, 以及 虛擬的 dom 對象, 有了虛擬 dom, 我們就可以在父組件中控制子組件的顯示了,這篇文章主要介紹了vue3組合式api中ref和$parent的使用,需要的朋友可以參考下2023-09-09

