dcloudio / uni-ui

基于uni-app的、全端兼容的、高性能UI框架
https://uniapp.dcloud.io/component/uniui/uni-ui.html
Apache License 2.0
1.86k stars 665 forks source link

fix: uni-popup-dialog 监听器未兼容modelValue的问题修正 #928

Closed sijunmanyue closed 1 week ago

sijunmanyue commented 1 month ago

最新版本,在created生命周期中做了value和modelValue的兼容:

created() {
    // 对话框遮罩不可点击
    this.popup.disableMask()
    // this.popup.closeMask()
    if (this.mode === 'input') {
        this.dialogType = 'info'
        this.val = this.value;
        // #ifdef VUE3
        this.val = this.modelValue;
        // #endif
    } else {
        this.dialogType = this.type
    }
}

但是watch中只有对value属性的监听器,因此在vue3的版本中,由于缺少modelValue监听器,使用v-model可能导致双向绑定失效。 修复vue2和Vue3设置对应的监听器:

// #ifdef VUE2
value(val) {
this.setVal(val)
},
// #endif
// #ifdef VUE3
modelValue(val) {
this.setVal(val)
}

/**
* 设置val的值
*/
setVal(val) {
if (this.maxlength != -1 && this.mode === 'input') {
    this.val = val.slice(0, this.maxlength);
} else {
    this.val = val
}
}
GRCmade commented 1 week ago

你好,经过测试之前的写法是生效的 image