vue中写一个简单的三级联动的组件

这篇博客详细介绍了如何在Vue中编写一个三级联动的组件。通过父子组件交互,利用applyDataArr数据结构,实现了根据一级、二级选择更新三级选项的功能。适用于多级分类选择场景。

生气父组件

<three-level :applyDataArr="applyDataArr" :title="title"></three-level>

定义一个applyDataArr 和title变量  子组件需要的

注意 :这个  applyDataArr  是请求数据的一个大的数组   三级联动所需要的所有的数据  树状的  不是一个下拉框一个数组的

例如:

applyDataArr: [
        {
            "id":16,
            "zid":"1005881907663503360",
            "typeName":"吃的",
            "depth":0,
            "parentId":"0",
            "createDate":1528271635000,
            "childList":[
                {
                    "id":21,
                    "zid":"1005955849820487651",
                    "typeName":"零食类",
                    "depth":1,
                    "parentId":"1005881907663503360",
                    "createDate":1528275939000,
                    "childList":[
                        {
                            "id":23,
                            "zid":"1005955231345197061",
                            "typeName":"辣条",
                            "depth":2,
                            "parentId":"1005955849820487651",
                            "createDate":1528275906000,
                            "childList":[


                            ]
                        }
                    ]
                },
                {
                    "id":22,
                    "zid":"1005955849820487615",
                    "typeName":"饭类",
                    "depth":1,
                    "parentId":"1005881907663503360",
                    "createDate":1528275939000,
                    "childList":[
                        {
                            "id":24,
                            "zid":"1005955231345197067",
                            "typeName":"大米",
                            "depth":2,
                            "parentId":"1005955849820487615",
                            "createDate":1528275906000,
                            "childList":[


                            ]
                        },
                        {
                            "id":25,
                            "zid":"1005955231345191324",
                            "typeName":"面条",
                            "depth":2,
                            "parentId":"1005955849820487615",
                            "createDate":1528275906000,
                            "childList":[


                            ]
                        },
                        {
                            "id":26,
                            "zid":"1005955231345195151",
                            "typeName":"呷哺",
                            "depth":2,
                            "parentId":"1005955849820487615",
                            "createDate":1528275906000,
                            "childList":[


                            ]
                        }
                    ]
                }
            ]
        },
        {
            "id":17,
            "zid":"1005889432446205952",
            "typeName":"喝的",
            "depth":0,
            "parentId":"0",
            "createDate":1528272090000,
            "childList":[
                {
                    "id":18,
                    "zid":"1005940800255074304",
                    "typeName":"奶类",
                    "depth":1,
                    "parentId":"1005889432446205952",
                    "createDate":1528275069000,
                    "childList":[
                        {
                            "id":19,
                            "zid":"1005955231345197056",
                            "typeName":"酸奶",
                            "depth":2,
                            "parentId":"1005940800255074304",
                            "createDate":1528275906000,
                            "childList":[


                            ]
                        }
                    ]
                }
            ]
        }
    ]

微笑子组件

<template>
<div>
<div class="input-box pr">
            <span class="label"><em>*</em>{{title}}</span>
            <select class="select-long"  v-on:change="classifyFirSel($event)" name = "classifyFir" v-model="classifyFir">
                <option value="0">请选择</option> 
                <option :value="item.zid" v-for="(item,index) in applyDataArrs" :key="index">{{item.typeName}}</option>
            </select>
            <select class="select-long"  @change="classifySecSel($event)" name = "classifySec" v-model="classifySec">
                <option value="0">请选择</option>
                <option :value="item.zid" v-for="(item,index) in applyDataSec" :key="index">{{item.typeName}}</option>
            </select>
            <select class="select-long"  name = "classifyThr" v-model="classifyThr">
                <option value="0">请选择</option>
                <option :value="item.zid" v-for="(item,index) in applyDataThr" :key="index">{{item.typeName}}</option>
            </select>
        </div>
</div>
</template>
<script>
export default{
data(){
return {
classifyFir: '',
classifySec: '',
classifyThr: '',
applyDataArrs: this.applyDataArr,
applyDataSec: [],
applyDataThr: []
}
},
props:[
'applyDataArr',
'title'
],
mounted(){
this.classifyFir = '0'
this.classifySec = '0'
this.classifyThr = '0'
},
methods:{
classifyFirSel:function(event){
                for(var i = 0;i<this.applyDataArrs.length;i++){
                    if(event.target.value==this.applyDataArrs[i].childList[0].parentId){
                        this.applyDataSec = this.applyDataArrs[i].childList
                        this.classifySec = '0'
                        this.classifyThr = '0'
                    }else if(event.target.value == 0){
                        this.applyDataSec = []
                        this.applyDataThr = []
                        this.classifySec = '0'
                        this.classifyThr = '0'
                    }
                }
            },
            classifySecSel:function(event){
                for(var i = 0;i<this.applyDataSec.length;i++){
                    if(event.target.value==this.applyDataSec[i].childList[0].parentId){
                        this.applyDataThr = this.applyDataSec[i].childList
                        this.classifyThr = '0'
                    }else if(event.target.value == 0){
                        this.applyDataThr = []
                        this.classifyThr = '0'
                    }
                }
            }
}
}

</script>


这就可以啦……




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值