iView Cascader如何动态加载省市区数据?
我用iView的Cascader做省市区三级联动,但数据量太大不想一次性加载。官方文档说支持动态加载,但我试了on-change事件里去请求下一级数据,结果选完省之后市没出来,控制台也没报错。
我这样写是不是不对?比如在loadData回调里更新options:
methods: {
handleLoadData(item, callback) {
if (item.level === 0) {
// 模拟请求市级
setTimeout(() => {
item.children = [{ value: 'shanghai', label: '上海市', level: 1 }];
callback();
}, 300);
}
}
}
Cascader 的动态加载是通过 loadData prop 实现的,不是 on-change 事件。
正确的写法:
几个关键点:
1. 初始 options 里的 children 必须写成空数组 [],不能省略,也不能有值。如果不写 children,Cascader 会认为这是叶子节点,不会触发 loadData
2. loadData 函数接收两个参数:item(当前节点)和 callback()。拿到数据后赋值给 item.children,然后一定要调用 callback()
3. 不是用 on-change 事件,在 loadData 里面直接处理就行
4. 如果你想判断层级,可以用 item.level 或者根据 value 去判断
代码放这了,你对照看下区别在哪。