最近产品要求做一个省市区选择,效果就建议使用element-UI的cascader级联,这也是我第一次使用此插件,但要在原cascader级联基础上加一个“全选”按钮,查看官方文档没有关于全选功能属性设置。搜索也没找到好的方法解决。最后请教一个大牛,下面是实现全选的方法.
(官方文档地址:https://element.eleme.cn/#/zh-CN/component/cascader)
方法就是:从树结构中抽出数据。变与model结构就可以了。
需要引用(官方可下载):
JS代码:
var data = [{
id: 1,
name: '东南',
children: [{
id: 2,
name: '上海',
children: [
{ id: 3, name: '普陀' },
{ id: 4, name: '黄埔' },
{ id: 5, name: '徐汇' }
]
}, {
id: 7,
name: '江苏',
children: [
{ id: 8, name: '南京' },
{ id: 9, name: '苏州' },
{ id: 10, name: '无锡' }
]
}, {
id: 12,
name: '浙江',
children: [
{ id: 13, name: '杭州' },
{ id: 14, name: '宁波' },
{ id: 15, name: '嘉兴' }
]
}]
}, {
id: 17,
name: '西北',
children: [{
id: 18,
name: '陕西',
children: [
{ id: 19, name: '西安' },
{ id: 20, name: '延安' }
]
}, {
id: 21,
name: '新疆维吾尔族自治区',
children: [
{ id: 22, name: '乌鲁木齐' },
{ id: 23, name: '克拉玛依' }
]
}]
}];
var Main = {
data() {
return {
check: false,
casVal: [[ 1, 2, 3 ]],
quchong: [],
props: {
multiple: true,
value: 'id',
label: 'name'
},
options: data
};
},
computed: {
allCheckValues() {
var model = []
function tree2arr(arr, str, level) {
arr.forEach(it => {
let newStr = str.length ? [...str, it.id] : [it.id];
if (it.children) {
tree2arr(it.children, newStr, level + 1)
} else {
model.push(newStr)
}
})
}
tree2arr(this.options, [], 0)
return model
},
},
methods: {
onCheck(v) {
this.casVal = v ? this.allCheckValues : []
console.log(this.casVal)
},
handleChange(value) {
console.log(value, '选中的vlaue值')
let selectVal = value;
let checkedCount = value.length;
this.check = checkedCount > 0 && checkedCount < this.options.length;
},
}
};
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')