javascript類庫:element ui table 增加篩選的方法示例

佚名發表於2018-11-27
文章主要介紹了element ui table 增加篩選的方法示例,詳細的介紹瞭如何新增規則內容,具有一定的參考價值,感興趣的小夥伴們可以參考一下

網上大部分都可以增加篩選功能,但沒有找到下列這種情況。

若表頭資料較多,而表頭是自己透過v-for迴圈產生,這種情況怎麼給虛擬dom新增篩選規則。

  1. <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兩個屬性,一個是寫規則的內容,一個是寫的方法。

  1. this.tableHead = [
  2.    {id: '1', label: xxx},
  3.    {id: '2', label: xxx, filter: []},
  4.    {id: '3', label: xxx, filter: []},
  5.    {id: '4', label: xxx},
  6.    {id: '5', label: xxx},
  7.    {id: '6', label: xxx, filter: []}
  8.   ]

只需要在要新增規則的上面加上filter這個key值。

filter裡面的內容要按照element ui 上面的格式塞進去

  1. :filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]"

所以只能用方法來找到相應的id然後再處理。

  1. let filterList = this.tableHead.filter(i => i.id === '1')[0].filter

規則的內容是和列表內容有關係,而一般情況下列表的內容也是從後端資料拿到的。所以要對規則的內容進行處理。

  1. this.tableData.forEach((item) => {
  2.    filterList.push({
  3.    text: item.xxx, value: item.yyy
  4.   })
  5.  })

這樣操作肯定會有重複的text和value,所以需要去重。

去重方法:

  1. uniqArrObject (arr) {
  2.   let result = {}
  3.   let finalResult = []
  4.   for (let i = 0; i < arr.length; i++) {
  5.    result[arr[i].text] = arr[i]
  6.   }
  7.   for (let key in result) {
  8.    finalResult.push(result[key])
  9.   }
  10.   return finalResult
  11.  },

得到最終的規則內容:

  1. filterList = this.uniqArrObject(filterList)

規則方法

  1. filterHandler (value, row, column) {
  2.   const property = column['property']
  3.   return row[property] === value || row[property].value === value
  4. },

以上就是本文的全部內容,希望對大家的學習有所幫助。

相關文章