Vue的兩級聯動,其實跟數組類似,直接上代碼吧。
<template> <div> <div> <label class="titlestyle">菜單一</label> <div class="typediv"> <label class="typestyle" v-bind:class="{ updata_lable: IsIndex === index }" v-for="(item, index) in typelist" :key="index" @click="FirstLevelChange(index, item)" >{{ item.menu_name }}</label > </div> </div> <br /> <div style="margin-top: 7px;"> <label class="titlestyle1" style>菜單二</label> <div class="typediv1"> <label class="typestyle" v-bind:class="{ updata_lable: Isred === index }" v-for="(item, index) in typelist[IsIndex].node" :key="index" @click="SecondLevelChange(index, item)" >{{ item.menu_name }}</label > </div> </div> </div> </template>
<script> export default { name: "clable", data() { return { typelist: [ { id: 4, parent_id: 0, menu_name: "第一級菜單 2", sorting: 0, node: [ { id: 5, parent_id: 4, menu_name: "第二級菜單 2-1", sorting: 0 } ] }, { id: 2, parent_id: 0, menu_name: "第二級菜單 2", sorting: 0, node: [ { id: 5, parent_id: 4, menu_name: "第二級菜單 2-1", sorting: 0 } ] } ], IsIndex: 0, Isred: 0 }; }, methods: { FirstLevelChange(index, item) { this.IsIndex = index; this.Isred = 0; this.$emit("SelectChange", 1, item.id); }, SecondLevelChange(index, item) { this.Isred = index; this.$emit("SelectChange", 2, item.id); } } }; </script>
<style lang="scss" scoped> .typestyle { color: rgba(112, 112, 112, 1); font-size: 14px; margin-right: 20px; } .typediv { float: left; margin-left: 20px; } .titlestyle { float: left; font-size: 14px; font-family: $base-font-family; font-weight: normal; color: rgba(112, 112, 112, 1); opacity: 1; margin-top: 5px; } .updata_lable { color: $base-color; font-size: 14px; margin-right: 20px; } .titlestyle1 { float: left; font-size: 14px; font-family: $base-font-family; font-weight: normal; color: rgba(112, 112, 112, 1); opacity: 1; margin-top: 5px; } .typediv1 { float: left; margin-left: 20px; } </style>
第二級菜單里面的 v-for="(item, index) in typelist[IsIndex].node" 里面加上[[IsIndex].node]是因為第二級菜單是在第一級的菜單基礎上進行點擊改變的。node是在數組里面定義的菜單的下一級數據的名稱。
需要注意的是,在js綁定數據這一塊,取的名字要與lable里面綁定的數據名稱一致,要不然數據是出不來的,這可馬虎不得!!!
本人呀,也是vue小白,還在學習中,要是用詞不當,請指正(*^▽^*)!!!