element-ui之级联选择器(Cascader) 全选 功能

最近产品要求做一个省市区选择,效果就建议使用element-UI的cascader级联,这也是我第一次使用此插件,但要在原cascader级联基础上加一个“全选”按钮,查看官方文档没有关于全选功能属性设置。搜索也没找到好的方法解决。最后请教一个大牛,下面是实现全选的方法.
(官方文档地址:https://element.eleme.cn/#/zh-CN/component/cascader)
方法就是:从树结构中抽出数据。变与model结构就可以了。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <div class="allSel">
            <div class="fang-ge"></div>
            <el-checkbox v-model="check" @change="onCheck" />全选
        </div>
        <div class="block">
            <!-- <span class="demonstration" style="color:#f54440;">选择指定可配送区域:</span> -->
            <el-cascader v-model="casVal" placeholder='此处展示已选的省市区' :options="options" :props="props"
                @change="handleChange" ref="myCascader" clearable>
            </el-cascader>
            <!-- 插件里选中的省市区赋值给标签,方便通过js获取 -->
            <div id="selectCity" style="display: none;" v-text="quchong"></div>

        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">
    </script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <script>
        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: [],
                    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) {
                    let selectVal = value;
                    this.allCheckValues.length == selectVal.length ? this.check = true : this.check = false;
                    console.log(selectVal, '选中的vlaue值')
                },
            }
        };
        var Ctor = Vue.extend(Main)
        new Ctor().$mount('#app')
    </script>
</body>

</html>

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值