写一个vue2的级联选择器,总共三级,每一级都可以全选,或者单独选中某一个,也可以取消选中
时间: 2024-02-16 07:05:38 浏览: 88
下面是一个简单的vue2级联选择器的实现,包含三级,每一级可以全选、单选和取消选中:
```html
<template>
<div>
<div v-for="(item, index) in options" :key="index">
<h3>{{ item.name }}</h3>
<div>
<input type="checkbox" :id="index+'_all'" v-model="item.checkedAll" @change="checkAll(index)">
<label :for="index+'_all'">全选</label>
</div>
<div v-for="(subItem, subIndex) in item.children" :key="subIndex">
<input type="checkbox" :id="index+'_'+subIndex" v-model="subItem.checked" @change="check(index, subIndex)">
<label :for="index+'_'+subIndex">{{ subItem.name }}</label>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{
name: '选项1',
checkedAll: false,
children: [
{ name: '选项1-1', checked: false },
{ name: '选项1-2', checked: false },
{ name: '选项1-3', checked: false }
]
},
{
name: '选项2',
checkedAll: false,
children: [
{ name: '选项2-1', checked: false },
{ name: '选项2-2', checked: false },
{ name: '选项2-3', checked: false }
]
},
{
name: '选项3',
checkedAll: false,
children: [
{ name: '选项3-1', checked: false },
{ name: '选项3-2', checked: false },
{ name: '选项3-3', checked: false }
]
}
]
}
},
methods: {
// 全选
checkAll(index) {
const item = this.options[index]
item.children.forEach(subItem => {
subItem.checked = item.checkedAll
})
},
// 单选
check(index, subIndex) {
const item = this.options[index]
const subItem = item.children[subIndex]
if (!subItem.checked) {
item.checkedAll = false
} else {
item.checkedAll = item.children.every(subItem => subItem.checked)
}
}
}
}
</script>
```
该组件的实现思路比较简单,使用一个数组来保存选项和状态,通过v-for指令和v-model指令来渲染和绑定数据,通过@change指令来监听选项的改变。其中checkAll方法用于全选,check方法用于单选。
阅读全文