網上大部分都可以增加篩選功能,但沒有找到下列這種情況。
若表頭數據較多,而表頭是自己通過v-for循環產生,這種情況怎么給虛擬dom添加篩選規則。
<el-table-column v-for="item in tableHead" :key="item.id" :prop="item.id" :label="item.label" :filters="item.filter" :filter-method="item.filter && filterHandler">
列表頭是通過v-for循環遍歷出來的數據
如何添加規則內容
首先,element提供了filters,filter-method兩個屬性,一個是寫規則的內容,一個是寫的方法。
this.tableHead = [ {id: '1', label: xxx}, {id: '2', label: xxx, filter: []}, {id: '3', label: xxx, filter: []}, {id: '4', label: xxx}, {id: '5', label: xxx}, {id: '6', label: xxx, filter: []} ]
只需要在要添加規則的上面加上filter這個key值。
filter里面的內容要按照element ui 上面的格式塞進去
:filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]"
所以只能用方法來找到相應的id然后再處理。
let filterList = this.tableHead.filter(i => i.id === '1')[0].filter
規則的內容是和列表內容有關系,而一般情況下列表的內容也是從后端數據拿到的。所以要對規則的內容進行處理。
this.tableData.forEach((item) => { filterList.push({ text: item.xxx, value: item.yyy }) })
這樣操作肯定會有重復的text和value,所以需要去重。
去重方法:
uniqArrObject (arr) { let result = {} let finalResult = [] for (let i = 0; i < arr.length; i++) { result[arr[i].text] = arr[i] } for (let key in result) { finalResult.push(result[key]) } return finalResult },
得到最終的規則內容:
filterList = this.uniqArrObject(filterList)
規則方法
filterHandler (value, row, column) { const property = column['property'] return row[property] === value || row[property].value === value},
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答