一、场景

        使用下拉组件(el-select)开发时,遇到一种场景,修改下拉选项时需要弹窗让用户二次确认,确定后才能更新新值,取消页面则需要回复原数据。

二、解决方案

1. el-select 增加 ref属性,并修改@change方法

<el-select v-model="ruleForm.sourceType"
  ref="ruleFormSourceType"
  @change="(currentValue) => handleChangeSourceType(currentValue, $refs['ruleFormSourceType'].value)"
  placeholder="转出对象类型">
  <el-option v-for="(item, index) of dictInfo.list['AAAAAA']"
     :key="index"
     v-if="item.dataCode != 20"
     :label="item.dataName"
     :value="item.dataCode"></el-option>
</el-select>

2. 增加对应的方法实现 handleChangeSourceType

            handleChangeSourceType(newVal, oldVal) {
                let _self = this;
                _self.$confirm("修改XXX将会清空XXX,是否继续?", {
                    confirmButtonText: "继续",
                    cancelButtonText: "取消",
                    type: "warning",
                }).then(() => {
                    _self.$set(_self.ruleForm, 'sourceId', '');
                    _self.$set(_self.ruleForm, 'sourceName', '');
                    _self.$set(_self.ruleForm, 'paymentTableData', []);
                }).catch(() => {
                    _self.$set(_self.ruleForm, 'sourceType', oldVal);
                });
            },

其中 newVal为修改后的新值,oldVal为原有旧值,使用 comfirm中的catch来捕获取消事件,并重置为旧值

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐