国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue Element 分組+多選+可搜索Select選擇器實現示例

2019-11-19 13:26:03
字體:
來源:轉載
供稿:網友

最終效果(http://47.98.205.88:3000/mult_group_selection)見下圖。實際就是將element三種官方select實例整合起來,同時實現分組+多選+可搜索,此外點擊一級分組名可以實現全選/全不選。供有相關需求的開發者參考


準備工作:

除了vue腳手架、element等必要包之外。該項目還用到了linq.js(https://github.com/mihaifm/linq),該工具可以快速從數組中查找所需內容。

npm install --save linq

編輯build/webpack.base.conf.js

module:{  ......  //添加  new webpack.ProvidePlugin({   Enumerable: "linq"  })}

數據源格式:

var selectList = [ {  name:"",//一級名稱  CName:"", //二級名稱  value:"" //值 }, {name:"",CName:"",value:""}, ......]

實現:

script

data (){ return{    selectModel: [],  multipleSelectOption:[], }},methods:{  //將源數據轉成element所需格式  transMultipleSelectOption(){    var level1List = Enumerable.from(this.allSelectList).distinct("o=>o.name").toArray();            var newArr = level1List.map(item=>{       let children = Enumerable.from(this.allSelectList).where((o)=>{return o.name==item.name;}).toArray();       var options = children.map(itemc=>{         return {"name": itemc.CName, "value":itemc.value};       });           return {"name": item.name, "options":options}     });     this.multipleSelectOption = newArr;  },      //重置options(select自動補全相關)  remoteMethod(queryString, lists) { //lists:原始數據     var mappedList = Enumerable.from(lists).where((o)=>{return o.CName.indexOf(queryString)!=-1        || o.name.indexOf(queryString)!=-1;}).toArray(); //找出匹配搜索關鍵字的數據集     var level1List = Enumerable.from(mappedList).distinct("o=>o.name").toArray(); //從所匹配的數據集中找出所有一級菜單集合(含去重)    //重新拼成element所需的數據格式     var newArr = level1List.map(item=>{       let children = Enumerable.from(mappedList).where((o)=>{return o.name==item.name;}).toArray();       var options = children.map(itemc=>{         return {"name": itemc.CName, "value":itemc.value};       });           return {"name": item.name, "options":options}     });     this.multipleSelectOption = newArr;  },  //點擊一級菜單全選/全不選實現  checkAll(value){ //value: 點擊的一級name     var list = Enumerable.from(this.multipleSelectOption).where((o)=>{return o.name==value;}).toArray();     var level2ValueList = Enumerable.from(list[0].options).select("o=>o.value").toArray(); //所有該一級下二級的value集合     var num=0;     level2ValueList.forEach((value)=>{       this.selectModel2.forEach((model, index)=>{        if(model==value){         this.selectModel2.splice(index, 1); //如有匹配,先刪除         num++;         return true;        }       })      })      if(num < level2ValueList.length){ //需要全選       this.selectModel2 = this.selectModel2.concat(level2ValueList); //合并數組      }     }},mounted: function(){   this.transMultipleSelectOption();},

template

<el-select v-model="selectModel" multiple filterable remote reserve-keyword   placeholder="請輸入關鍵詞" :remote-method="(queryString)=>{    remoteMethod(queryString, allSelectList);  }">  <el-option-group v-for="group in multipleSelectOption"   :key="group.name"   :label="group.name"    @click.native="checkAll(group.name)">   <el-option v-for="item in group.options"     :key="item.value"     :label="item.name"     :value="item.value">   </el-option>  </el-option-group></el-select>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东宁县| 道孚县| 尤溪县| 丰城市| 郸城县| 任丘市| 开封市| 海门市| 修武县| 普兰县| 舟曲县| 吴旗县| 蒲城县| 马公市| 南部县| 莱阳市| 南涧| 永定县| 抚松县| 长宁区| 台东市| 东台市| 周宁县| 莲花县| 庆元县| 福建省| 伊宁市| 新巴尔虎右旗| 体育| 右玉县| 宁蒗| 格尔木市| 阿克陶县| 左贡县| 三亚市| 琼海市| 古交市| 桐庐县| 洪洞县| 曲靖市| 扎囊县|