搜索結果支持全選與取消選擇,且添加到已選中(支持刪除與清空)javascript
demo : http://msisliao.github.io/dem...css
倉庫代碼 : https://github.com/msisliao/v...html
npm i element-ui -S
// main.js import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI)
- 默認沒有全選,搜索時支持全選與取消全選,
- 將選擇的數據添加到已選中,已選刪除時改變當前搜索列表的狀態與全選按鈕的狀態
- 全選時所有追加到已選,取消全選時從已選中刪除當前搜索的列表
一、搜索時展現相應的數據列表,支持全選與取消全選,(默認展現全部數據時不支持全選)vue
datas() { // 每次搜索的數據 根據下拉菜單的值的變化 if (this.value !== "") { return this.listItem.list.filter(item => { return item.BrandNames.includes(this.value); }); } else { return this.listItem.list; // 沒有搜索的關鍵詞時展現所有數據 } },
二、搜索的下拉菜單去重java
filDatas() { // 利用reduce 下拉菜單去重 var obj = {}; return this.listItem.list.reduce(function(item, next) { obj[next.BrandNames] ? "" : (obj[next.BrandNames] = true && item.push(next)); return item; }, []); }
三、當前界面全選時添加到已選中,當前界面取消全選時,從已選的數據刪除當前搜索出來的列表數據,git
// 每次搜索列表的全選 與 取消全選 ckAll() { this.allck = !this.allck; //點擊全選 變 取消選擇 let arrys = []; //存放複選框爲取消狀態的數據 if (this.allck) { // 將當前搜索的列表數據追加到已選中 this.datas.forEach(item => { item.ck = true; if (!this.arr.includes(item)) { // 追加複選框爲false的數據 this.arr.push(item); this.ckarr.push(item); } }); } else { this.datas.forEach(item => { item.ck = false; }); //當前搜索的數據列表複選框設爲取消狀態 arrys = this.datas.filter(item => { return !item.ck; }); //把複選框爲false的數據 拿出來 this.datas.forEach(items => { //已選那裏刪除當前搜索列表複選框爲false的數據 arrys.forEach(item => { if (item.BrandID == items.BrandID) { this.arr.splice(this.arr.indexOf(item), 1);} }); }); this.ckarr = []; //當前搜索列表爲複選框的數據清空 } },
四、列表選中時添加到已選,所有選中時改變全選狀態(變取消全選)github
// 監聽當前搜索列表的勾選數據 ckarr: function() { if (this.value !== "") { this.ckarr.length == this.datas.length ? this.allck = true : this.allck = false; //若是已選等於當前搜索列表 改變全選狀態 } }
五、在已選中操做刪除時,若是刪除的是當前搜索的列表,當前全選改變狀態,若是刪除的非當前搜索列表,當前全選狀態不變(這裏有點繞)vue-cli
handleClose(tag) { this.arr.splice(this.arr.indexOf(tag), 1); // 點哪刪哪 this.ckarr.forEach(items => { // 判斷刪除的是不是當前搜索列表的數據 是的話改變全選狀態 if (items.BrandID == tag.BrandID) { this.ckarr.splice(this.ckarr.indexOf(tag), 1); } }); this.listItem.list.forEach(items => { // 刪除已選時改變數據列表狀態 if (items.BrandID == tag.BrandID) { items.ck = false; } }); },