我用的是w-picker
插件,跟你一样的需求,从数据库甚至是ajax获取数据后赋值,比如用户的生日。我自己修改了下代码,在method下增加了setDefaultVal:
/**
* 设置默认值,目前只支持日期和datetime以及selector,其他的没写
* @param dt
*/
setDefaultVal(dt) {
if (!dt || !Array.isArray(dt)) {
return;
}
//做下延迟处理,不然ios可能获取不到this.data
let hasData = false;
for (let x in this.data) {
hasData = true;
break;
}
if (!hasData) {
setTimeout(() => {
this.setDefaultVal(dt);
}, 100);
return;
}
let getIndex = (obj, val) => {
let idx = -1;
if (Array.isArray(obj)) {
for (let i = 0; i < obj.length; i++) {
if (val === obj[i]) {
idx = i;
break;
}
}
}
return idx;
}
let chk = [],
pick = [],
resultStr = '';
if (this.mode === 'selector') {
for (let i = 0; i < this.data.length; i++) {
if (this.data[i].value === dt[0]) {
chk = this.data[i];
pick = [i];
resultStr = this.data[i].label;
break;
}
}
} else {
let maps = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];
switch (this.mode) {
case 'time':
maps = ['hours', 'minutes', 'seconds'];
break;
}
dt.forEach((x, i) => {
pick[i] = Math.max(0, getIndex(this.data[maps[i]], x));
chk[i] = x;
if (i == 0) {
resultStr = x;
} else if (i <= 2) {
resultStr += '-' + x;
} else if (i == 3) {
resultStr += ' ' + x
} else {
resultStr += ':' + x;
}
});
// pick = chk;
}
this.$nextTick(() => {
this.pickVal = pick;
this.checkArr = chk;
this.resultStr = resultStr;
});
},
然后在需要的地方通过ref调用。
1 个回复
剩人
我用的是
w-picker
插件,跟你一样的需求,从数据库甚至是ajax获取数据后赋值,比如用户的生日。我自己修改了下代码,在method下增加了setDefaultVal:然后在需要的地方通过ref调用。