2021-10-12

本文探讨了如何在UViewPicker组件中实现动态加载多级数据的下拉列表,以解决大数据项目中一次性加载的性能问题。通过代码示例展示了如何根据用户交互动态调整数据范围,减少不必要的API请求,提高用户体验。
摘要由CSDN通过智能技术生成

问题:

1、原有的uview组件库没有动态的获取多级列表数据选择,只能是固定数据的选择

2、项目多级列表数据庞大,一次性获取所有数据不太现实

3、需求就是:能动态的去选择多级数据,减少请求量

话不多说上代码:

html:

<u-picker v-model="showselect"
    mode="multiSelector"
    ref="multiSelector"
    :range="range"
    :defaultSelector="defaultSelector"
    :key="rangeKey"
    @columnchange="columnchange"></u-picker>

data:

 showselect: false,
 range: [
   ['亚洲', '欧洲'], ['中国', '日本'], ['北京', '上海', '广州']
 ],
 rangeKey: 0,
 defaultSelector: [0, 0, 0],

methods:

  showselectAction () {
      this.showselect = true
    },
  columnchange (e) {
      console.log(e)
      let column = e.column, index = e.index;
      this.defaultSelector[column] = index;
      switch (column) {
        case 0:
          switch (index) {
            case 0:
              setTimeout(() => {
                this.range[1] = ['中国', '日本']
                this.range[2] = ['北京', '上海', '广州']
                this.$refs.multiSelector.init()
              }, 500);
              break
            case 1:
              setTimeout(() => {
                this.range[1] = ['英国', '法国']
                this.range[2] = ['伦敦', '曼彻斯特']
                this.$refs.multiSelector.init()
              }, 500);
              break
          }
          break
        case 1: //拖动第2列
          switch (this.defaultSelector[0]) { //判断第一列是什么
            case 0:
              switch (this.defaultSelector[1]) {
                case 0:
                  setTimeout(() => {
                    this.range[2] = ['北京', '上海', '广州']
                    this.$refs.multiSelector.init()
                  }, 500);
                  break
                case 1:
                  setTimeout(() => {
                    this.range[2] = ['东京', '北海道']
                    this.$refs.multiSelector.init()
                  }, 500);
                  break
              }
              break
            case 1:
              switch (this.defaultSelector[1]) {
                case 0:
                  setTimeout(() => {
                    this.range[2] = ['伦敦', '曼彻斯特']
                    this.$refs.multiSelector.init()
                  }, 500);
                  break
                case 1:
                  setTimeout(() => {
                    this.range[2] = ['巴黎', '马赛']
                    this.$refs.multiSelector.init()
                  }, 500);
                  break
              }
              break
          }
          case 2:
          	this.$forceUpdate()
          	break
      }
    },

思路来源

piker源码

在这里插入图片描述
因为在源码中,通过init()方法动态的去刷新了valueArr,这样就可以刷新数据列,在不使用这些方法,我发现不能数据列不能及时的刷新
网上有人多人用的是 this.defaultSelector.splice(1, 1, 0),这种的,这种的只对同步的数据有作用,对异步请求的数据无作用。

该笔记仅供参考哟!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值