演示地址,打开、搜索、随便点
http://msisliao.github.io/dem...
npm i element-ui -S
// main.js import 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 "htmlcode">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"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.ckarr.length == this.datas.length "color: #ff0000">总结以上所述是小编给大家介绍的vue 实现搜索的结果页面支持全选与取消全选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。