Vxetable實現(xiàn)更新列屬性,比如過濾,排序等等
Vxetable如何更新列屬性,比如過濾,排序
在使用vxeTable 進行二次封裝表格組件時,會遇到更改表頭數(shù)據(jù)從而更改列屬性的變化的情況。
如果直接更改表頭數(shù)據(jù)控制列是否可以排序和過濾,這樣是不生效的,因為vxeTable 的列屬性不是響應(yīng)式的。
解決方法
可以在每次更新之前,先從表格中獲取所有的列信息,然后用結(jié)構(gòu)賦值的方法,將當(dāng)前跟新的數(shù)據(jù)補充進列信息之后,使用。
loadColumn 進行列刷新
// 獲取原始vxeTable的column 數(shù)據(jù)
const oldColumns = xTable.value.getColumns() || [];
const reFreshColumn = [] as any;
// 對之前存在的數(shù)據(jù)列進行強制刷新
tableNormalOptions.value.forEach((item: any) => {
let temp = oldColumns.find((oldItem: any) => item.prop === oldItem.field);
if (temp) {
temp = {
...temp,
...item,
};
reFreshColumn.push(temp);
}
});
// 對于之前存在的列進行強制刷新
xTable.value.loadColumn(reFreshColumn);這樣僅僅只適用于只有一級表頭的簡單的表格,如果目標表格是一個多級表頭的復(fù)雜表格,此種方式就不適用了。
可以嘗試使表格重新渲染的方法
<template>
<vxe-table :key=currentKey></vxe-table>
</template>
<script>
import {ref, watch, defineProps} from 'vue';
cosnt props = defineProps({
tableHeadOptions:{
type:Object as any,
default:()=>({});
}
})
// 用隨機數(shù)生成一個唯一key
const currentKey = ref(Math.random())
// watch 監(jiān)聽表頭數(shù)據(jù)變化,更新currentKey, 從而達到表格重新渲染的效果
watch(()=>props.tableHeadOptions,()=>{
// props.tableHeadOptions 生成多級表頭省略代碼
currentKey.value = Math.random();
})
</script>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中div contenteditable 的光標定位方法
今天小編就為大家分享一篇Vue中div contenteditable 的光標定位方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
vue使用video插件vue-video-player的示例
這篇文章主要介紹了vue使用video插件vue-video-player的示例,幫助大家更好的理解和使用vue插件,感興趣的朋友可以了解下2020-10-10
Vue $router.push打開新窗口的實現(xiàn)方法
在Vue中,$router.push方法默認不支持在新窗口中打開頁面,但通過結(jié)合window.open方法和$router.resolve方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09
webpack dev-server代理websocket問題
這篇文章主要介紹了webpack dev-server代理websocket問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

