ui文档上直接给了一函数
先试试看效果是什么,加上let id=0;不然会报错
props: {lazy: true,lazyLoad (node, resolve) {let id = 0;const { level } = node;setTimeout(() => {const nodes = Array.from({ length: level + 1 })//创建一个新数组,数组长度level + 1.map(item => ({//然后链式调用 map 为这个新数组每一项填充内容value: ++id,label: `选项${id}`,leaf: level >= 2}));// 通过调用resolve将子节点数据返回,通知组件数据加载完成resolve(nodes);}, 1000);}}
- setTimeout模拟的大概是从后端拿到数据的时间
- Array.from的作用可以先去搜一下,它返回了一个新的数组
- 链式调用的map对从后端拿到的数组做了处理,如果你试过普通的级联选择器,就造label和value是ui组件必须的,label是下拉框展示的标签,value就是对应的值。还有一个leaf是boolean,判断是不是级联选择器的最后一截,示例是用>=2判断的。
- 最后将处理好的数组放在resolve()里面
node
要传的参数怎么拿?看node参数。现在程序不会报错,并且你已经理解了一大半的代码,可以打印node看看是什么
最后我完成了级联调用的效果
lazyLoad(node, resolve) {const { level, data } = node //ui组件返回的选中的当前节点let parentCodeif (data) {parentCode = data.code}/*** @description: 获取可选地区* @param {*} level //0-省 ,1-市,2-区* @param {*} parentCode 是取的上一级的code* @return {*}*/getLocation({ level, parentCode }) //后端接口.then((res) => {const result = res.result.map((item) => {const { level, name, code } = item // 提取属性return {label: name, // 修改属性名value: name, // 修改属性名code,level,leaf: level == 2}})resolve(result)}).catch((err) => {console.warn(err)})}