element ui级连选择,lazyLoad选择地区

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判断的。没有leaf:true,级联选择器可以一直选下去。
  • 最后将处理好的数组放在resolve()里面

node

要传的参数怎么拿?看node参数。现在程序不会报错,并且你已经理解了一大半的代码,可以打印node看看是什么,就是点击的这一级的参数。

最后我完成了级联调用的效果

lazyLoad(node, resolve) {
          const { level, data } = node //ui组件返回的选中的当前节点
          let parentCode
          if (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)
            })
        }

你可能感兴趣的:(javascript,开发语言,ecmascript)