vant Cascader级联选择实现可以选择任意一层级
作者:i紸定i
这篇文章主要介绍了vant Cascader级联选择实现可以选择任意一层级方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
vant Cascader级联选择可以选择任意一层级
通过使用change事件,来实现选择任意一层级
<template> <div> <van-cascader :options="options" :value="selectedValue" @change="handleCascaderChange" ></van-cascader> </div> </template>
data() { return { options: [ { value: '1', label: 'Option 1', children: [...] }, { value: '2', label: 'Option 2', children: [...] }, ... ], selectedValue: [] // 记录选择值 }; }, methods: { handleCascaderChange(value) { this.selectedValue = value; } }
van-cascader 异步加载
异步加载选项
在使用级联选择时当一次性拿到数据量太大时不仅接口慢而且前端渲染页面也会变慢,用户体验很不好,建议使用异步加载选项,
拿到的接口让后端返回一个是否还有下一级的判断,不然van-cascader判断没有children的时候会自动结束的
可以监听 change 事件并动态设置 options,实现异步加载选项。
示例:
<van-popup v-model:show="showCascader" round position="bottom"> <van-cascader v-if="showCascader" // 加上这个是因为在企微侧边栏使用的时候,操作偶尔会出现tabs歪的情况 v-model="formData.id" title="请选择xxx" :options="options" active-color="#1989fa" :field-names="fieldNames" @change="onChange" @close="showCascader = false" @finish="onFinish" /> </van-popup>
自定义字段名
后端定义的字段一开始可能不符合vant的默认字段,通过 field-names 属性可以自定义 options 里的字段名称。
const fieldNames = { // 换成后端返回的你需要的对应字段 text: 'name', value: 'id', children: 'children' };
监听change事件,动态设置options
const onChange = ({value,selectedOptions}) => { getList({code:value}).then(res => { //请求接口 res.data.map(item=>{ if(item.children.length==0){ // 这个是和后端约定了如果没有子级,返回一个空数组,可以自己和后端约定一个可判断的值 delete item.children } }) addTree(selectedOptions, res.data, value) }); }; const addTree = (selectedOptions, children, id) =>{ selectedOptions.forEach(item => { if (item.id=== id) { // 注意这里是你要的value item.children = children } }) }
这样就可以动态的获取到每一级下面的数据了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。