vue中el-checkbox全選、反選、多選的實(shí)現(xiàn)
vue el-checkbox全選、反選、多選
描述:實(shí)現(xiàn)對(duì)一組數(shù)據(jù)進(jìn)行全選,反選、多選操作

- 全選
handleCheckAllChange(val) {
this.checkedCities = val ? cityOptions : [];
this.isIndeterminate = false;
this.checkInvert = false;
}- 反選
handleInvertCheckChange(val) {
let cities = this.cities;
let checkedCities = this.checkedCities;
if (checkedCities.length === 0) {
checkedCities = val ? cities : [];
} else if (checkedCities.length === cities.length) {
this.checkedCities = [];
this.checkAll = false;
} else {
let list = cities.concat(checkedCities).filter((v, i, array) => {
return array.indexOf(v) === array.lastIndexOf(v);
});
this.checkedCities = list;
}
}- 多選
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.cities.length;
this.isIndeterminate =
checkedCount > 0 && checkedCount < this.cities.length;
this.checkInvert = false;
}完整代碼
<template>
<div>
<el-checkbox
v-model="checkAll"
@change="handleCheckAllChange"
:indeterminate="isIndeterminate"
>全選</el-checkbox
>
<el-checkbox v-model="checkInvert" @change="handleInvertCheckChange"
>反選</el-checkbox
>
<el-checkbox-group
v-model="checkedCities"
@change="handleCheckedCitiesChange"
>
<el-checkbox v-for="city in cities" :label="city" :key="city">{{
city
}}</el-checkbox>
</el-checkbox-group>
</div>
</template>
<script>
const cityOptions = ["上海", "北京", "廣州", "深圳"];
export default {
data() {
return {
checkAll: false,
checkInvert: false,
checkedCities: ["上海", "北京"],
cities: cityOptions,
isIndeterminate: true,
};
},
methods: {
// 全選
handleCheckAllChange(val) {
this.checkedCities = val ? cityOptions : [];
this.isIndeterminate = false;
this.checkInvert = false;
},
// 反選
handleInvertCheckChange(val) {
let cities = this.cities;
let checkedCities = this.checkedCities;
if (checkedCities.length === 0) {
checkedCities = val ? cities : [];
} else if (checkedCities.length === cities.length) {
this.checkedCities = [];
this.checkAll = false;
} else {
let list = cities.concat(checkedCities).filter((v, i, array) => {
return array.indexOf(v) === array.lastIndexOf(v);
});
this.checkedCities = list;
}
},
// 多選
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.cities.length;
this.isIndeterminate =
checkedCount > 0 && checkedCount < this.cities.length;
this.checkInvert = false;
},
},
};
</script>
<style>
</style>checkbox多選框,indeterminate 狀態(tài)
舉個(gè)例子。比如選擇星期。一周七天
2種方法。思密達(dá)。。。。第一種帶局限性。笨辦法,也發(fā)出來(lái)大家看看(推薦使用第二種)
這是方式的值是組件自帶的值方式
const cityOptions = ['周一', '周二', '周三', '周四','周五','周六','周天']
<template>
? <div>
? ? <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全選</el-checkbox>
? ? <div style="margin: 15px 0;"></div>
? ? <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
? ? ? <el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
? ? </el-checkbox-group>
? </div>
</template>
<script>
? const cityOptions = ['周一', '周二', '周三', '周四','周五','周六','周天']
? export default {
? ? data() {
? ? ? return {
? ? ? ? checkAll: false,
? ? ? ? checkedCities: [],
? ? ? ? cities: cityOptions,
? ? ? ? isIndeterminate: true,
? ? ? ? arr:[]
? ? ? }
? ? },
? ? methods: {
? ? ? handleCheckAllChange(val) {
? ? ? ? let tempArr = []
? ? ? ? this.checkedCities = val ? cityOptions : []
? ? ? ? this.isIndeterminate = false
? ? ? ? // console.log(this.checkedCities)
? ? ? ? // console.log(val)
? ? ? ? if (this.checkedCities != []) {
? ? ? ? ? ? ? if(val == true){
? ? ? ? ? ? ? ? tempArr = [1,2,3,4,5,6,0]
? ? ? ? ? ? ? ? this.arr = tempArr
? ? ? ? ? ? ? }else if(val==false){
? ? ? ? ? ? ? ? tempArr = []
? ? ? ? ? ? ? ? this.arr = tempArr
? ? ? ? ? }
? ? ? ? }
? ? ? ? console.log(this.arr)
? ? ? },
? ? ? handleCheckedCitiesChange(value) {
? ? ? ? let checkedCount = value.length;
? ? ? ? this.checkAll = checkedCount === this.cities.length;
? ? ? ? this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
? ? ? ? var tempArr = []
? ? ? ? for(let i=0;i<value.length;i++){
? ? ? ? ? if(value[i] === '周一') {
? ? ? ? ? ? tempArr.push(1)
? ? ? ? ? }else if(value[i] === '周二'){
? ? ? ? ? ? tempArr.push(2)
? ? ? ? ? }else if(value[i] === '周三'){
? ? ? ? ? ? tempArr.push(3)
? ? ? ? ? }else if(value[i] === '周四'){
? ? ? ? ? ? tempArr.push(4)
? ? ? ? ? }else if(value[i] === '周五'){
? ? ? ? ? ? tempArr.push(5)
? ? ? ? ? }else if(value[i] === '周六'){
? ? ? ? ? ? tempArr.push(6)
? ? ? ? ? }else if(value[i] === '周天'){
? ? ? ? ? ? tempArr.push(0)
? ? ? ? ? }
? ? ? ? }
? ? ? ? this.arr = tempArr
? ? ? ? console.log(this.arr)
? ? ? }
? ? }
? }
</script>
<style scoped>
</style>之后UP想了一下。不對(duì)。后臺(tái)反過(guò)來(lái)的數(shù)組不應(yīng)該是這種。大部分都應(yīng)該是obj的形式
于是乎。
const cityOptions = [{a:'周一',b:1}, {a:'周二',b:2}, {a:'周三',b:3},{a:'周四',b:4},{a:'周五',b:5},{a:'周六',b:6},{a:'周天',b:7}];對(duì)吧這種形式才對(duì)。說(shuō)不定可能有很多很多。萬(wàn)一叫你把一個(gè)月都列出來(lái)也說(shuō)不定。
繼續(xù)上代碼
<template>
? ? <div style="height: 1000px">
? ? ? <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全選</el-checkbox>
? ? ? <div style="margin: 15px 0;"></div>
? ? ? <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
? ? ? ? <el-checkbox v-for="city in cities" :label="city.b" :key="city.b">{{city.a}}</el-checkbox>
? ? ? </el-checkbox-group>
? ? </div>
</template>
<script>
? const cityOptions = [{a:'周一',b:1}, {a:'周二',b:2}, {a:'周三',b:3},{a:'周四',b:4},{a:'周五',b:5},{a:'周六',b:6},{a:'周天',b:7}];
? export default {
? ? name: "tourSpecialEdition",
? ? components: {},
? ? data(){
? ? ? return{
? ? ? ? checkAll: false,
? ? ? ? checkedCities: [],
? ? ? ? cities: cityOptions,
? ? ? ? isIndeterminate: false
? ? ? }
? ? },
? ? created() {},
? ? mounted() {},
? ? methods: {
? ? ? handleCheckAllChange(val) {
? ? ? ? const arr = val ? cityOptions : [];
? ? ? ? this.checkedCities = [];
? ? ? ? arr.map(item => {
? ? ? ? ? this.checkedCities.push(item.b);
? ? ? ? ? console.log(this.checkedCities.sort())
? ? ? ? });
? ? ? ? this.isIndeterminate = false;
? ? ? },
? ? ? handleCheckedCitiesChange(value) {
? ? ? ? let arrTime = value
? ? ? ? this.checkedCities = arrTime
? ? ? ? console.log(this.checkedCities.sort())
? ? ? ? let checkedCount = value.length;
? ? ? ? this.checkAll = checkedCount === this.cities.length;
? ? ? ? this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
? ? ? }
? ? }
? }
</script>
<style scoped>
</style>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue使用video標(biāo)簽實(shí)現(xiàn)視頻播放
這篇文章主要為大家詳細(xì)介紹了Vue使用video標(biāo)簽實(shí)現(xiàn)視頻播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
vue2.0$nextTick監(jiān)聽(tīng)數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法
今天小編就為大家分享一篇vue2.0$nextTick監(jiān)聽(tīng)數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue 重置data的數(shù)據(jù)為初始狀態(tài)操作
這篇文章主要介紹了Vue 重置data的數(shù)據(jù)為初始狀態(tài)操作方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
elementUI?checkBox報(bào)錯(cuò)Cannot read property &ap
這篇文章主要為大家介紹了elementUI?checkBox報(bào)錯(cuò)Cannot read property 'length' of undefined的解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Vue?CompositionAPI中watch和watchEffect的區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Vue?CompositionAPI中watch和watchEffect的區(qū)別,文中的示例代碼簡(jiǎn)潔易懂,希望對(duì)大家學(xué)習(xí)Vue有一定的幫助2023-06-06
詳解本地Vue項(xiàng)目請(qǐng)求本地Node.js服務(wù)器的配置方法
本文只針對(duì)自己需要本地模擬接口于是搭建一個(gè)本地node服務(wù)器供自己測(cè)試使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Nuxt3項(xiàng)目搭建過(guò)程(Nuxt3+element-plus+scss詳細(xì)步驟)
這篇文章主要介紹了Nuxt3項(xiàng)目搭建(Nuxt3+element-plus+scss詳細(xì)步驟),本次記錄一次使用Nuxt3搭建前端項(xiàng)目的過(guò)程,內(nèi)容包含Nuxt3的安裝,基于Vite腳手架(默認(rèn))構(gòu)建的vue3項(xiàng)目,element-plus的安裝配置,scss的安裝,目錄結(jié)構(gòu)的創(chuàng)建和解釋,需要的朋友可以參考下2022-12-12
vue發(fā)送驗(yàn)證碼計(jì)時(shí)器防止刷新實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了vue發(fā)送驗(yàn)證碼計(jì)時(shí)器防止刷新實(shí)現(xiàn)詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

