vue2 el-checkbox-group復(fù)選框無(wú)法選中問(wèn)題及解決
vue2 el-checkbox-group 復(fù)選框無(wú)法選中
原代碼
<template slot-scope="scope"> <el-checkbox v-model="scope.row.bitian">必填</el-checkbox> </template> if (this.allTemplateList && this.allTemplateList.length > 0) { this.allTemplateList.forEach(template => { template.bitian = false; template.number = ''; template.shangchuandatas = []; template.wenjiandaxiao = ''; }) },
修改后
在遍歷 this.allTemplateList 時(shí),使用 Vue.set 或 this.$set 來(lái)確保新添加的屬性是響應(yīng)式的
if (this.allTemplateList && this.allTemplateList.length > 0) { this.allTemplateList.forEach((template, index) => { this.$set(this.allTemplateList, index, { ...template, bitian: false, number: '', shangchuandatas: [], wenjiandaxiao: '', }); }); }
多個(gè)el-checkbox-group復(fù)選框組 選項(xiàng)互斥
需求
多個(gè)el-checkbox-group復(fù)選框組 , 組與組之間的選項(xiàng)是互斥的效果
效果
代碼實(shí)現(xiàn)(方法一)
- template
<template> <div class="page"> <el-checkbox-group v-for="(item, index) in list" v-model="item.checked" :key="index" @change="checkboxChange" > <el-checkbox v-for="(jitem, jindex) in item.checkData" :label="jitem.label" :key="jindex" :disabled="jitem.disabled" >{{ jitem.name }}</el-checkbox > </el-checkbox-group> </div> </template>
- script
<script> export default { name: 'xxx', data() { return { list: [ { checked: [], // 選中值 checkData: [ // 復(fù)選框 { label: 'name1', name: '名稱(chēng)1', disabled: false }, { label: 'name2', name: '名稱(chēng)2', disabled: false }, { label: 'name3', name: '名稱(chēng)3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name1', name: '名稱(chēng)1', disabled: false }, { label: 'name4', name: '名稱(chēng)4', disabled: false }, { label: 'name3', name: '名稱(chēng)3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name1', name: '名稱(chēng)1', disabled: false }, { label: 'name4', name: '名稱(chēng)4', disabled: false }, { label: 'name3', name: '名稱(chēng)3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name5', name: '名稱(chēng)5', disabled: false }, { label: 'name1', name: '名稱(chēng)1', disabled: false }, { label: 'name3', name: '名稱(chēng)3', disabled: false } ] } ] } }, methods: { /** * @description 復(fù)選框change事件 * @param {array} val 復(fù)選框值 * @param {number} i 索引 * @return {void} Do not return anything */ checkboxChange() { let checkedAll = []// 存儲(chǔ)所有的選中值 this.list.forEach(item => { // 初始化數(shù)據(jù),復(fù)選框都可選 item.checkData.forEach(jitem => { jitem.disabled = false }) // 將選中的數(shù)據(jù)存儲(chǔ)arr中 item.checked.forEach(kitem => { checkedAll.push(kitem) }) }) // 去重 checkedAll = Array.from(new Set(checkedAll)) // 互斥操作 this.list.forEach(item => { item.checkData.forEach(jitem => { if (checkedAll.includes(jitem.label) && !item.checked.includes(jitem.label)) { // 當(dāng)復(fù)選框?qū)?yīng)數(shù)據(jù)存在arr中,不存在對(duì)應(yīng)的checked中時(shí),設(shè)為禁用狀態(tài) jitem.disabled = true } }) }) } } } </script>
代碼實(shí)現(xiàn)(方法二)
- template
<template> <div class="page"> <el-form> <el-form-item v-for="(item, index) in list" :label="'復(fù)選框組' + (index + 1)" :key="index"> <el-checkbox-group v-model="item.checked"> <el-checkbox v-for="(jitem, jindex) in item.checkData" :label="jitem.label" :key="jindex" :disabled="setDisabledMuti(jitem, index)" >{{ jitem.name }}</el-checkbox> </el-checkbox-group> </el-form-item> </el-form> </div> </template>
- script
<script> export default { name: 'xxx', data() { return { checkedAll: [], list: [ { checked: ['name1'], // 選中值 checkData: [ // 復(fù)選框 { label: 'name1', name: '名稱(chēng)1' }, { label: 'name2', name: '名稱(chēng)2' }, { label: 'name3', name: '名稱(chēng)3' } ] }, { checked: ['name4'], checkData: [ { label: 'name1', name: '名稱(chēng)1' }, { label: 'name4', name: '名稱(chēng)4' }, { label: 'name3', name: '名稱(chēng)3' } ] }, { checked: ['name3'], checkData: [ { label: 'name1', name: '名稱(chēng)1' }, { label: 'name4', name: '名稱(chēng)4' }, { label: 'name3', name: '名稱(chēng)3' } ] }, { checked: ['name5'], checkData: [ { label: 'name5', name: '名稱(chēng)5' }, { label: 'name1', name: '名稱(chēng)1' }, { label: 'name3', name: '名稱(chēng)3' } ] } ] } }, //計(jì)算屬性 computed: { setDisabledMuti() { return function(opt, index) { // 全部已選擇 const tempArr = this.list.map(item => item.checked) // 先刪除自己的已選 tempArr.splice(index, 1) // 轉(zhuǎn)為一維數(shù)組 const selectedArr = tempArr.flat(); // 其它的已選,禁用 return selectedArr.includes(opt.label) } } } } </script>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue新建項(xiàng)目并配置標(biāo)準(zhǔn)路由過(guò)程解析
這篇文章主要介紹了vue新建項(xiàng)目并配置標(biāo)準(zhǔn)路由過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)的實(shí)例詳解(params/query)
在使用`router.push`進(jìn)行路由跳轉(zhuǎn)到另一個(gè)組件時(shí),可以通過(guò)`params`或`query`來(lái)傳遞參數(shù),這篇文章主要介紹了vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)(params/query),需要的朋友可以參考下2023-09-09在Vue中使用scoped屬性實(shí)現(xiàn)樣式隔離的原因解析
scoped是Vue的一個(gè)特殊屬性,可以應(yīng)用于<style>標(biāo)簽中的樣式,這篇文章給大家介紹在Vue中,使用scoped屬性為什么可以實(shí)現(xiàn)樣式隔離,感興趣的朋友一起看看吧2023-12-12Vue3使用Element?Plus實(shí)現(xiàn)列表界面的方法步驟
寫(xiě)后臺(tái)管理的時(shí)候會(huì)有很多列表以及相應(yīng)的條件查詢(xún),下面這篇文章主要給大家介紹了關(guān)于Vue3使用Element?Plus實(shí)現(xiàn)列表界面的方法步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04使用Element-UI的el-tabs組件,瀏覽器卡住了的問(wèn)題及解決
這篇文章主要介紹了使用Element-UI的el-tabs組件,瀏覽器卡住了的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue單頁(yè)式應(yīng)用(Hash模式下)實(shí)現(xiàn)微信分享的實(shí)例
本篇文章介紹了Vue單頁(yè)式應(yīng)用(Hash模式下)實(shí)現(xiàn)微信分享的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07