<template>
<div>
<van-cascader v-model="cascaderValue" title="请选择所在地区" :options="options" @close="areaShow = false" @finish="onFinish" :field-names="fieldNames" @change="onChangeArea" />
</div>
</template>
<script>
export default {
data() {
return {
areaShow: false,
cascaderValue: '',
fieldNames: {
text: 'name',
value: 'id',
children: 'children'
},
// 选项列表,children 代表子选项,支持多级嵌套
options: [],
divisionIds: '', // 地区的id
divisionNames: '' // 地区的名字
}
},
methods: {
// 级联数据全部选项选择完毕后,会触发 finish 事件
onFinish({ selectedOptions }) {
this.divisionNames = selectedOptions.map(option => option.name).join('/')
this.divisionIds = selectedOptions.map(option => option.id).join(',')
this.areaShow = false
},
// 从接口请求获取第一层的数据,---比如北京
async getAreaList() {
const id = ''
const res = await getAreaList(id)
res.data.forEach(item => {
this.options.push({
name: item.name,
id: item.id,
children: item.children || null// 这个很关键
})
})
},
onChangeArea({ value, selectedOptions, tabIndex }) {
// 需要后台接口返回children数据
// 拿到数据后,动态添加
getAreaList(value).then(res => {
// 第一种方案
this.addTree(selectedOptions, res.data, value)
})
},
addTree(selectedOptions, children, id) {
selectedOptions.forEach(item => {
if (item.id === id) {
item.children = children
}
})
}
}
}
</script>
<style>
</style>
版权声明:本文为weixin_57246351原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。