项目里常常会用到,在一个多选下拉框里新增一个选择全部的选项,例如:css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <script src="https://unpkg.com/element-ui/lib/index.js"></script> </head> <body> <div id="app"> <el-form> <el-form-item> <el-select placeholder="请选择活动区域" multiple v-model="citys"> <el-option v-for="item in cities" :label="item.label" :value="item.value" :key="item.value"></el-option> </el-select> </el-form-item> </el-form> </div> <script> new Vue({ el:"#app", data:{ cities: [ {value: 'Beijing',label: '北京'}, {value: 'Shanghai',label: '上海'}, {value: 'Nanjing',label: '南京'}, {value: 'Chengdu',label: '成都'}, {value: 'Shenzhen',label: '深圳'}, {value: 'Guangzhou',label: '广州'} ], citys:[] } }) </script> </body> </html>
渲染以下:html
此时能够多选,若是想要选择全部选项时,得一个个去点击,这样不是很方便,咱们能够在下拉框里新增一个选择全部的选项,经过watch用几行代码就能够实现与其它选项的互斥来实现一键多选,以下:vue
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <script src="https://unpkg.com/element-ui/lib/index.js"></script> </head> <body> <div id="app"> <el-form> <el-form-item> <el-select placeholder="请选择活动区域" multiple v-model="citys"> <el-option label="选择全部" value="all"></el-option> <el-option v-for="item in cities" :label="item.label" :value="item.value" :key="item.value"></el-option> </el-select> </el-form-item> </el-form> </div> <script> new Vue({ el:"#app", data:{ cities: [ {value: 'Beijing',label: '北京'}, {value: 'Shanghai',label: '上海'}, {value: 'Nanjing',label: '南京'}, {value: 'Chengdu',label: '成都'}, {value: 'Shenzhen',label: '深圳'}, {value: 'Guangzhou',label: '广州'} ], citys:[] }, watch:{ citys:function(val,oldval){ if(val.indexOf('all')!=-1 && oldval.indexOf('all')==-1 && val.length>1){ //若是新的选择里有勾选了选择全部选择全部 则 只直线勾选全部整个选项 this.citys=['all']; }else if(index = val.indexOf('all')!=-1 && oldval.indexOf('all')!=-1 && val.length>1){ //若是操做前有勾选了选择全部且当前也选中了勾选全部且勾选数量大于1 则移除掉勾选全部 this.citys.splice(val.indexOf('all'),1) } } } }) </script> </body> </html>
这样就能够互斥了,咱们选择北京和上海时,选择器以下:element-ui
点击选择全部时,以下:app
而后再点击其它选项,选择全部就会取消勾选了,例如选择深圳:ui
这样实现了选择全部和其它选择项的互斥,而其它选择又能够多选。this