連動式下選單,分三部份
1. templeate
2. 資料結構
3. function
不使用套件
<template> <div> <b-form-select label="Country" v-model="reportFilterData.country" :options="showCountries()" ></b-form-select> <b-form-select v-if="reportFilterData.country" label="City" v-model="reportFilterData.city" :options="showCities()" ></b-form-select> <b-form-select v-if="reportFilterData.city" label="Region" v-model="reportFilterData.region" :options="showRegions()" ></b-form-select> <b-form-select v-if="reportFilterData.region" label="Site" v-model="reportFilterData.site" :options="showSites()" ></b-form-select> <b-form-select :label="Floor" v-model="reportFilterData.floor" :options="showFloors()" ></b-form-select> </div> </template>
// selectItem
private Areas: any = [
{
id: "taiwan",
text: "Taiwan",
sub: [
{
id: "taipei",
text: "Taipei",
sub: [
{
id: "daan",
text: "Daan",
sub: [
{
id: "daan1",
text: "Daan1",
sub: [
{ id: "daan1_1f", text: "1F" },
{ id: "daan1_2f", text: "2F" },
{ id: "daan1_2f", text: "3F" }
]
},
{
id: "daan2",
text: "Daan2",
sub: [
{
id: "daan2_11f",
text: "11F"
},
{
id: "daan2_22f",
text: "12F"
},
{
id: "daan2_33f",
text: "13F"
}
]
},
{
id: "daan3",
text: "Daan3",
sub: [{ id: "daan3_5f", text: "5F" }]
}
]
},
{
id: "sinyi",
text: "Sinyi",
sub: [
{ id: "sinyi1", text: "Sinyi1", sub: [] },
{ id: "sinyi2", text: "Sinyi2", sub: [] },
{ id: "sinyi3", text: "Sinyi3", sub: [] }
]
},
{ id: "wunshan", text: "Wunshan", sub: [] }
]
},
{
id: "taichung",
text: "Taichung",
sub: [
{ id: "south", text: "South", sub: [] },
{ id: "west", text: "West", sub: [] },
{ id: "north", text: "North", sub: [] }
]
},
{
id: "kaohsiung",
text: "Kaohsiung",
sub: [
{ id: "gushan", text: "Gushan", sub: [] },
{ id: "zuoying", text: "Zuoying", sub: [] },
{ id: "siaogang", text: "Siaogang", sub: [] }
]
}
]
},
{
id: "china",
text: "China",
sub: [
{ id: "hk", text: "Hong Kong", sub: [] },
{ id: "bj", text: "BeiJing", sub: [] },
{ id: "xm", text: "Xia Men", sub: [] }
]
}
];
showOptions(level: number, refid?: string[]) { function deepTrace( areabase: AreaUnit[], targetLevel: number = 0, // 目標level level: number = 0, // 當前level refid?: string[] // 比對的id ): AreaUnit[] | undefined { // 目標level小於當前level,不執行函數 if (targetLevel < level) return; // 目標level和當前level相同 if (targetLevel === level) { return areabase.map((item, index) => { let { id, text } = item; return { id, text }; }); } else { // 目標level和當前leval不相同 for (let area of areabase) { if (area.id !== refid[level]) continue; return deepTrace(area.sub, targetLevel, level + 1, refid); } return; } } return deepTrace(this.Areas, level, 0, refid); } showCountries() { return this.showOptions(0); } showCities() { return this.showOptions(1, [this.reportFilterData.country]); } showRegions() { return this.showOptions(2, [ this.reportFilterData.country, this.reportFilterData.city ]); } showSites() { return this.showOptions(3, [ this.reportFilterData.country, this.reportFilterData.city, this.reportFilterData.region ]); } showFloors() { return this.showOptions(4, [ this.reportFilterData.country, this.reportFilterData.city, this.reportFilterData.region, this.reportFilterData.site ]); }
文章標籤
全站熱搜
