最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+element-ui表格自定義列模版的實現(xiàn)

 更新時間:2024年05月06日 10:46:00   作者:JOEY P  
本文主要介紹了vue+element-ui表格自定義列模版的實現(xiàn),通過插槽完美解決了element-ui表格自定義列模版的問題,具有一定的參考價值,感興趣的可以了解一下

前言

日前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)文章

  • 分分鐘玩轉(zhuǎn)Vue.js組件

    分分鐘玩轉(zhuǎn)Vue.js組件

    這篇文章教大家如何分分鐘玩轉(zhuǎn)Vue.js組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Vue3+elementPlus中 樹形控件封裝的實現(xiàn)

    Vue3+elementPlus中 樹形控件封裝的實現(xiàn)

    本文主要介紹了Vue3+elementPlus中 樹形控件封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Vue實現(xiàn)星級評價效果實例詳解

    Vue實現(xiàn)星級評價效果實例詳解

    這篇文章主要介紹了Vue實現(xiàn)星級評價效果的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Vue3在history模式下如何通過vite打包部署白屏

    Vue3在history模式下如何通過vite打包部署白屏

    這篇文章主要介紹了Vue3在history模式下如何通過vite打包部署白屏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue前端書寫規(guī)范大全(非常詳細!)

    Vue前端書寫規(guī)范大全(非常詳細!)

    在團體開發(fā)項目中,為了團隊所有成員書寫可維護的代碼,而不是一次性的代碼,讓團隊當(dāng)中其他人看你的代碼能一目了然,下面這篇文章主要給大家介紹了關(guān)于Vue前端書寫規(guī)范的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 從零搭建一個vite+vue3+ts規(guī)范基礎(chǔ)項目(搭建過程問題小結(jié))

    從零搭建一個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)航欄組件

    這篇文章主要為大家詳細介紹了vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue3?組合式api中?ref?和$parent?的使用方法

    vue3?組合式api中?ref?和$parent?的使用方法

    vue3中, 在 組件中添加一個 component ref=“xxx” ,就可以在父組件中得到 子組件的 dom 對象, 以及 虛擬的 dom 對象, 有了虛擬 dom, 我們就可以在父組件中控制子組件的顯示了,這篇文章主要介紹了vue3組合式api中ref和$parent的使用,需要的朋友可以參考下
    2023-09-09
  • Vue.js中的computed工作原理

    Vue.js中的computed工作原理

    這篇文章,我們通過實現(xiàn)一個簡單版的和Vue中computed具有相同功能的函數(shù)來了解computed是如何工作的。對Vue.js中的computed工作原理感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-03-03
  • Vue2.x中的Render函數(shù)詳解

    Vue2.x中的Render函數(shù)詳解

    通常開發(fā)vue我們使用的是模板語法,其實還有和react相同的語法,那就是render函數(shù),同樣支持jsx語法。Vue 的模板實際是編譯成了 render 函數(shù)。
    2017-05-05

最新評論

安化县| 九龙城区| 四子王旗| 资源县| 赣榆县| 肃宁县| 黎川县| 东阿县| 嵩明县| 旺苍县| 长宁县| 仙桃市| 襄城县| 郯城县| 通化县| 扶沟县| 高青县| 衢州市| 句容市| 栾城县| 民乐县| 从江县| 临武县| 城市| 永登县| 会理县| 威海市| 巨鹿县| 纳雍县| 缙云县| 鸡西市| 宕昌县| 南部县| 庄河市| 三台县| 金坛市| 安康市| 锡林浩特市| 股票| 平舆县| 英德市|