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)文章
vue常用指令實現(xiàn)學(xué)生錄入系統(tǒng)的實戰(zhàn)
本文主要介紹了vue常用指令實現(xiàn)學(xué)生錄入系統(tǒng)的實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Vue+better-scroll 實現(xiàn)通訊錄字母索引的示例代碼
通訊錄字母索引是常用的一種功能,本文主要介紹了Vue+better-scroll 實現(xiàn)通訊錄字母索引,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06vue-cli3項目升級到vue-cli4 的方法總結(jié)
這篇文章主要介紹了vue-cli3項目升級到vue-cli4 的方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Vue通過自定義指令實現(xiàn)內(nèi)容替換的示例代碼
這篇文章主要介紹了利用Vue通過自定義指令實現(xiàn)內(nèi)容替換的方法,通過Vue.directive指令定義函數(shù)來實現(xiàn)內(nèi)容自定義,通過指令定義函數(shù)的三個鉤子函數(shù)(inserted、componentUpdated、unbind)來實現(xiàn)自定義內(nèi)容的掛載、更新和銷毀,需要的朋友可以參考下2025-03-03ArcGis?API?for?js在vue.js中的使用示例詳解
這篇文章主要為大家介紹了ArcGis?API?for?js在vue.js中的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08前端vue3打印功能實現(xiàn)(多頁打印、不使用插件)
在Vue項目中實現(xiàn)打印功能是前端開發(fā)中常見需求之一,這篇文章主要介紹了前端vue3打印功能實現(xiàn)的全部過程,文中介紹的方法實現(xiàn)了多頁打印并且不使用插件,需要的朋友可以參考下2024-09-09