1***@qq.com
1***@qq.com
  • 发布:2019-12-23 19:36
  • 更新:2019-12-24 09:41
  • 阅读:847

#插件讨论# 【 日期、时间、二级联动、三级联动picker(示例为最新版) - 380624367@qq.com 】没办法动态设置defaultVal

分类:uni-app

mode="date"的defaultVal没办法动态设置。一旦动态设置后就报错了,有没有办法直接上源码改?

2019-12-23 19:36 负责人:无 分享
已邀请:
剩人

剩人

我用的是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调用。

该问题目前已经被锁定, 无法添加新回复