uview piker多列动态更改数据 下拉列表动态修改数据
问题:
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),这种的,这种的只对同步的数据有作用,对异步请求的数据无作用。
该笔记仅供参考哟!!!