亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue 實現搜索的結果頁面支持全選與取消全選功能

2019-11-19 11:36:40
字體:
來源:轉載
供稿:網友

演示地址,打開、搜索、隨便點

http://msisliao.github.io/dem...

npm i element-ui -S

// main.jsimport ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.css'Vue.use(ElementUI)

demo功能概覽

  • 默認沒有全選,搜索時支持全選與取消全選,
  • 將選擇的數據添加到已選中,已選刪除時改變當前搜索列表的狀態與全選按鈕的狀態
  • 全選時全部追加到已選,取消全選時從已選中刪除當前搜索的列表

功能列表

1、搜索時展示相應的數據列表,支持全選與取消全選,(默認展示所有數據時不支持全選)

datas() { // 每次搜索的數據 根據下拉菜單的值的變化 if (this.value !== "") { return this.listItem.list.filter(item => {  return item.BrandNames.includes(this.value); }); } else { return this.listItem.list; // 沒有搜索的關鍵詞時展示全部數據 } },

2、搜索的下拉菜單去重

filDatas() { // 利用reduce 下拉菜單去重 var obj = {}; return this.listItem.list.reduce(function(item, next) { obj[next.BrandNames] ? "" : (obj[next.BrandNames] = true && item.push(next)); return item; }, []); }

3、當前界面全選時添加到已選中,當前界面取消全選時,從已選的數據刪除當前搜索出來的列表數據,

// 每次搜索列表的全選 與 取消全選 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 = []; //當前搜索列表為復選框的數據清空 } },

4、列表選中時添加到已選,全部選中時改變全選狀態(變取消全選)

// 監聽當前搜索列表的勾選數據 ckarr: function() { if (this.value !== "") { this.ckarr.length == this.datas.length ? this.allck = true : this.allck = false; //如果已選等于當前搜索列表 改變全選狀態 } }

5、在已選中操作刪除時,如果刪除的是當前搜索的列表,當前全選改變狀態,如果刪除的非當前搜索列表,當前全選狀態不變(這里有點繞)

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; } }); },

app.vue

<template> <div class='tpbox'> <el-select v-model="values" filterable placeholder="請選擇" size="mini" clearable >  <el-option v-for="item in filDatas" :key="item.BrandID" :label="item.BrandNames" :value="item.BrandNames" :value-key='item.BrandID'>  </el-option> </el-select> <!-- 搜索的列表 --> <div v-if="values!=='' && values!==null ">  <p class='ck-btn-box'>  <el-button size="mini" @click="ckAll">{{allck?'取消全選':'全選'}}</el-button>  </p>  <ul>  <li v-for="item in datas" :key="item.BrandID">   <span>AA{{item.BrandTypeName}}</span>   <span>BB{{item.BrandCName}}</span>   <span>CC{{item.BrandName}}</span>   <span>   <el-checkbox v-model="item.ck" @change="handItem(item)">{{item.BrandNames}}</el-checkbox>   </span>  </li>  </ul> </div> <!-- 默認列表 --> <ul v-else>  <li v-for="item in datas" :key="item.BrandID">  <span>AA{{item.BrandTypeName}}</span>  <span>BB{{item.BrandCName}}</span>  <span>CC{{item.BrandName}}</span>  <span>   <el-checkbox v-model="item.ck" @change="handItem(item)">{{item.BrandNames}}</el-checkbox>  </span>  </li> </ul> <p class='checked-box' v-if="this.arr.length>0">  已選:  <span @click="clearAll" class='clearll-txt'>清空</span>  <el-tag v-for="tag in this.arr" :key="tag.BrandID" closable @close="handleClose(tag)" :disable-transitions=true>  {{tag.BrandName}} / {{tag.BrandNames}}  </el-tag> </p> </div></template><script>export default { data() { return { allck: false, //控制全選 當沒有任何操作時每次默認為 true ckarr: [], //每次搜索出來點擊了復選框 arr: [], //點擊了input的數據 存放所有的已選 values: "", listItem:{ list: [  {  BrandTypeName: "大類1 建材/家居 ", //品牌正常  BrandTypeID: 1,  BrandCName: "中類1 建筑材料",  BrandCID: 1,  BrandName: "小類1 水泥",  BransID: 1,  BrandNames: "紅水泥",  BrandID: 1,  ck: false  },  {  BrandTypeName: "大類1 建材/家居 ", //品牌在多個小類里  BrandTypeID: 1,  BrandCName: "中類2 家私定制",  BrandCID: 2,  BrandName: "小類2 電飯煲",  BransID: 2,  BrandNames: "松下",  BrandID: 2,  ck: false  },  {  BrandTypeName: "大類1 建材/家居 ",  BrandTypeID: 1,  BrandCName: "中類2 家私定制",  BrandCID: 2,  BrandName: "小類3 電壓力鍋",  BransID: 3,  BrandNames: "松下",  BrandID: 3,  ck: false  },  {  BrandTypeName: "大類1 建材/家居 ", //品牌在多個中類小類里  BrandTypeID: 1,  BrandCName: "中類2 高檔家具",  BrandCID: 3,  BrandName: "小類2 家具類",  BransID: 4,  BrandNames: "品牌",  BrandID: 4,  ck: false  },  {  BrandTypeName: "大類1 建材/家居 ",  BrandTypeID: 1,  BrandCName: "中類2 豪華家具",  BrandCID: 4,  BrandName: "小類3 廚具類",  BransID: 5,  BrandNames: "品牌2",  BrandID: 5,  ck: false  },  {  BrandTypeName: "大類1 裝修/房產 ",  BrandTypeID: 2,  BrandCName: "中類2 豪華家具",  BrandCID: 5,  BrandName: "小類3 沙發類",  BransID: 6,  BrandNames: "品牌3",  BrandID: 6,  ck: false  } ] } }; }, computed: { datas(){ if(!this.values){ return this.listItem.list } //每次搜索的數據 if (this.values !== "") { return this.listItem.list.filter(item => {  return item.BrandNames.includes(this.values); }); }  }, filDatas() { //select下拉菜單去重 相同名字的子選項會存放在多個類別里 var obj = {}; return this.listItem.list.reduce(function(item, next) { obj[next.BrandNames] ? "" : (obj[next.BrandNames] = true && item.push(next)); return item; }, []); } }, watch: { // 監聽每次搜索時的數據變化 datas: function(ary) { //搜索數據變化時 如果搜的結果全部是已選 第二次搜這個關鍵詞就變成 取消選擇 if (this.values !== "") { this.allck = false; //默認每次搜索時是全選狀態 需判斷之前是否全選中的 有的話就是取消全選  ary.every( item => { item.ck ? !this.allck : this.allck }); // 將當前搜索列表的已選拿出來 this.ckarr = this.datas.filter(item => {  if (item.ck) { return item; } }); } }, // 監聽每次搜索列表的數據是否全部為選中 判斷已選的數據是不是等于當前搜索列表的數據 ckarr: function() { if (this.values !== "") { this.ckarr.length == this.datas.length ? this.allck = true : this.allck = false; //如果已選等于當前搜索列表 改變全選狀態 } }, }, methods: { // 數據列表的復選框點擊 handItem(item) { if (item.ck) { this.arr.push(item); //arr是所有復選框的數據 存放在已選中 this.ckarr.push(item); //ckarr是每次搜索列表點了復選框的數據 當取消全選時 在已選的大數組中刪除 ckarr的數據 } else { this.arr.splice(this.arr.indexOf(item), 1); this.ckarr.splice(this.arr.indexOf(item), 1); } }, // 已選中的 單個刪除 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; } }); }, // 清空操作 clearAll() { this.listItem.list.forEach(item => { item.ck = false; }); // 數據列表狀態恢復 this.arr = []; //已選全部清空  this.ckarr = [] // 當前搜索列表存放的已選全部清空 this.allck = false; //全選狀態恢復 this.values='' //回到默認數據  }, // 每次搜索列表的全選 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 = []; //當前搜索列表為復選框的數據清空 } }, }};</script><style scoped>.tpbox { background: #fff; padding: 30px; height: 500px;} ul { margin-top: 15px; } li { justify-content: space-around; display: flex; line-height: 50px; color: #666; border-bottom: 1px solid #eee; } span { flex: 1; text-align: left; padding-left: 10px; } .checked-box { margin-top: 20px;  } .el-tag { margin-left: 10px; } .clearll-txt { color: red; cursor: pointer; } .ck-btn-box { margin-top: 30px; }</style>

總結

以上所述是小編給大家介紹的vue 實現搜索的結果頁面支持全選與取消全選功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女国内精品自产拍在线播放| 色天天综合狠狠色| 国产日韩精品综合网站| 欧美激情精品久久久久久免费印度| 国产综合在线视频| 精品一区二区三区四区在线| 91av视频在线| 国产亚洲精品久久久久久| 一区二区三区国产视频| 欧美老女人bb| 欧美日韩在线视频一区二区| 成人黄色av免费在线观看| 7777免费精品视频| 久久国产精品99国产精| 永久免费毛片在线播放不卡| 国产精品午夜一区二区欲梦| 亚洲国产精久久久久久久| 久久中文久久字幕| 精品福利一区二区| 麻豆国产精品va在线观看不卡| 欧美怡红院视频一区二区三区| 成人av电影天堂| 久久青草福利网站| 欧美福利在线观看| 国产精品自产拍高潮在线观看| 97精品国产97久久久久久春色| 亚洲视频在线免费看| 色噜噜狠狠色综合网图区| 亚洲a区在线视频| 久久99精品视频一区97| 国产亚洲成av人片在线观看桃| 91亚洲精品一区| 亚洲免费一级电影| 高潮白浆女日韩av免费看| 亚洲国产精品久久精品怡红院| 国产精品普通话| 久久久久成人网| 精品久久久久久久久中文字幕| 狠狠躁夜夜躁人人爽天天天天97| 最近免费中文字幕视频2019| 亚州精品天堂中文字幕| 久久久久久久97| 欧美在线视频免费播放| 隔壁老王国产在线精品| 日韩在线观看精品| 亚洲97在线观看| 91精品国产自产在线| 欧美日韩免费看| 不卡av在线播放| 国产精品h在线观看| 欧美日韩亚洲精品内裤| 日韩一区二区欧美| 欧美激情精品久久久久| 97久久精品人人澡人人爽缅北| 97视频在线观看成人| 亚洲网站视频福利| 韩剧1988在线观看免费完整版| 亚洲国产精品热久久| 97在线视频免费| 精品视频在线播放色网色视频| 在线精品国产成人综合| 亚洲欧美日韩中文视频| 日韩欧美精品在线观看| 91精品久久久久久| 亚洲va欧美va国产综合久久| 91九色蝌蚪国产| 久久亚洲欧美日韩精品专区| 欧美激情综合色综合啪啪五月| 国产成人在线视频| 一本一本久久a久久精品牛牛影视| 国产精品国产三级国产专播精品人| 日本中文字幕不卡免费| 国产精品青青在线观看爽香蕉| 亚洲天堂av在线免费| www.xxxx精品| 欧美日韩国产二区| 欧美激情视频网站| 久久久在线观看| 人妖精品videosex性欧美| 97精品久久久中文字幕免费| 狠狠躁天天躁日日躁欧美| 欧美最猛黑人xxxx黑人猛叫黄| 国产在线观看精品一区二区三区| 91在线免费视频| 亚洲成人网久久久| 精品女同一区二区三区在线播放| 久久久精品美女| 日本三级久久久| 亚洲性视频网站| 久久午夜a级毛片| 亚洲人成人99网站| 97视频免费在线观看| 深夜福利国产精品| 亚洲第一网中文字幕| 日韩成人免费视频| 精品无人区太爽高潮在线播放| 国产欧美日韩专区发布| 亚洲最新中文字幕| 高潮白浆女日韩av免费看| 91在线观看免费高清| 尤物yw午夜国产精品视频| 精品久久久久久中文字幕一区奶水| 日韩电影视频免费| 国产成+人+综合+亚洲欧洲| 91免费精品视频| 亚洲自拍偷拍区| 欧美又大又硬又粗bbbbb| 91久久精品视频| 日韩欧美国产免费播放| 亚洲国产毛片完整版| 黄色精品在线看| 91av在线免费观看视频| 日韩成人在线视频观看| 久久精品中文字幕一区| 色婷婷久久一区二区| 97免费中文视频在线观看| 久久久精品中文字幕| 亚洲人成网站色ww在线| 久久久亚洲天堂| 亚洲女人被黑人巨大进入| 91精品国产91久久久| 国产精品久久久久一区二区| 欧美孕妇孕交黑巨大网站| 精品夜色国产国偷在线| 亚洲摸下面视频| 欧美午夜精品久久久久久久| 国产精品免费看久久久香蕉| 91精品国产综合久久香蕉| 国产a∨精品一区二区三区不卡| 国产视频亚洲精品| 欧美日韩免费观看中文| 51精品国产黑色丝袜高跟鞋| 欧美大片va欧美在线播放| 精品久久久久久久久中文字幕| 成人免费淫片视频软件| 日韩av综合网站| 亚洲人精选亚洲人成在线| 红桃视频成人在线观看| 中文字幕亚洲无线码a| 久久成人精品电影| 在线观看欧美成人| 欧美激情xxxx| 亚洲精品国产美女| 91精品视频免费看| 成人黄色中文字幕| 国产精品久久久久免费a∨大胸| 成人福利网站在线观看| 欧美在线视频免费播放| 性欧美办公室18xxxxhd| 亚洲japanese制服美女| 91香蕉国产在线观看| 欧美激情按摩在线| 国产精品男女猛烈高潮激情| 日韩精品日韩在线观看| 国产91精品视频在线观看| 亚洲欧美日韩精品久久奇米色影视| 2019中文字幕全在线观看| 日韩hd视频在线观看| 国产日韩在线一区| 亚洲视频在线看| 亚洲一区二区三区视频| 日本欧美一级片| 91亚洲永久免费精品| 国产一区二区三区网站|