<template>
<div class="container">
<el-cascader
v-model="value"
:options="optionData"
:show-all-levels="false"
placeholder="正在选择数据中"
@change="handleDeptName"
></el-cascader>
</div>
</template>
<script>
export default {
data() {
return {
optionData: [],
value: [],
vals: []
};
},
created() {},
mounted() {
const data = [
{
date: "2016-05-02",
id: "1",
name: "第一层数据1",
address: "1518",
children: [
{
date: "2016-05-02",
id: "11",
name: "第二层数据11",
address: "1518",
children: [
{
date: "2016-05-02",
id: "111",
name: "第三层数据111",
address: "1518",
children: [
{
date: "2016-05-02",
id: "1111",
name: "第四层数据1111",
address: "1518"
},
{
date: "2016-05-02",
id: "1111",
name: "第四层数据1112",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "112",
name: "第三层数据112",
address: "1518"
},
{
date: "2016-05-02",
id: "113",
name: "第三层数据113",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "12",
name: "第二层数据12",
address: "1518",
children: [
{
date: "2016-05-02",
id: "121",
name: "第三层数据121",
address: "1518"
},
{
date: "2016-05-02",
id: "122",
name: "第三层数据122",
address: "1518"
},
{
date: "2016-05-02",
id: "123",
name: "第三层数据123",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "13",
name: "第二层数据13",
address: "1518",
children: [
{
date: "2016-05-02",
id: "131",
name: "第三层数据131",
address: "1518"
},
{
date: "2016-05-02",
id: "132",
name: "第三层数据132",
address: "1518"
},
{
date: "2016-05-02",
id: "133",
name: "第三层数据133",
address: "1518"
}
]
}
]
},
{
date: "2016-05-04",
id: "2",
name: "第一层数据2",
address: "1517",
children: [
{
date: "2016-05-02",
id: "21",
name: "第二层数据21",
address: "1518",
children: [
{
date: "2016-05-02",
id: "211",
name: "第三层数据211",
address: "1518"
},
{
date: "2016-05-02",
name: "第三层数据212",
id: "212",
address: "1518"
},
{
date: "2016-05-02",
name: "第三层数据213",
id: "213",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "22",
name: "第二层数据22",
address: "1518",
children: [
{
date: "2016-05-02",
id: "221",
name: "第三层数据221",
address: "1518"
},
{
date: "2016-05-02",
id: "222",
name: "第三层数据222",
address: "1518"
},
{
date: "2016-05-02",
id: "223",
name: "第三层数据223",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "23",
name: "第二层数据23",
address: "1518",
children: [
{
date: "2016-05-02",
id: "231",
name: "第三层数据231",
address: "1518"
},
{
date: "2016-05-02",
id: "232",
name: "第三层数据232",
address: "1518"
},
{
date: "2016-05-02",
id: "233",
name: "第三层数据233",
address: "1518"
}
]
}
]
},
{
date: "2016-05-01",
id: "3",
name: "第一层数据3",
address: "1519",
children: [
{
date: "2016-05-02",
id: "31",
name: "第二层数据31",
address: "1518"
},
{
date: "2016-05-02",
id: "32",
name: "第二层数据32",
address: "1518",
children: [
{
date: "2016-05-02",
id: "321",
name: "第三层数据321",
address: "1518"
},
{
date: "2016-05-02",
id: "322",
name: "第三层数据322",
address: "1518"
},
{
date: "2016-05-02",
id: "323",
name: "第三层数据323",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "33",
name: "第二层数据33",
address: "1518",
children: [
{
date: "2016-05-02",
id: "331",
name: "第三层数据331",
address: "1518",
children: [
{
date: "2016-05-02",
id: "3331",
name: "第三层数据3331",
address: "1518"
},
{
date: "2016-05-02",
id: "3332",
name: "第三层数据3332",
address: "1518"
},
{
date: "2016-05-02",
id: "3333",
name: "第三层数据3333",
address: "1518"
}
]
},
{
date: "2016-05-02",
id: "332",
name: "第三层数据332",
address: "1518"
},
{
date: "2016-05-02",
id: "333",
name: "第三层数据333",
address: "1518"
}
]
}
]
}
];
this.init(data);
},
methods: {
//初始化数据
init(data) {
const newData = data.map(item => {
return this.addValue(item);
});
this.optionData = newData;
},
//获取选中的数据
handleDeptName() {
this.vals = this.getCascaderObj(this.value, this.optionData);
console.log(this.vals[this.vals.length - 1].id);
console.log(this.vals[this.vals.length - 1].label);
},
getCascaderObj(val, opt) {
return val.map(function(value, index, array) {
for (var itm of opt) {
if (itm.value == value) {
opt = itm.children;
return itm;
}
}
return null;
});
},
//给初始化数据添加 label 和 value 属性
//若有更好的方法,还请兄台告知
addValue(item) {
return {
value: item.name,
label: item.name,
id: item.id,
children: item.children
? item.children.map(itemes => {
return this.addValue(itemes);
})
: ""
};
}
}
};
</script>
<style lang="scss" scoped>
.container {
max-width: 600px;
margin: 0 auto;
}
</style>
多层数组对象添加属性值
最新推荐文章于 2022-10-30 13:14:12 发布