You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中isteven-multi-select单选选项值保存异常问题如何解决?

问题根因

你碰到的问题主要来自3个核心错误:

  1. 取值参数错误:注册函数中selectedUnique传入了全量选项数组$scope.impactos,而不是组件绑定的选中输出对象$scope.impacto,导致只有第一个选项能被正确匹配,Queda de Performance永远匹配失败返回Nenhum。
  2. 三元运算逻辑错误:嵌套三元运算符写法混乱,尤其是更新函数中最后多写了一层无效的"Nenhum" ? "Nenhum" : "Nenhum"判断,逻辑完全不符合预期。
  3. 编辑回显缺失映射:服务端存储的是不带前缀的枚举值,和下拉选项的name字段不匹配,编辑时没有做反向映射赋值给组件,导致Nenhum的选中状态无法被组件识别,提交时自然被忽略。

修复方案

1. 统一值转换逻辑(推荐用对象映射替代嵌套三元,避免出错)

你可以在控制器公共区域先定义好双向映射关系,避免重复写判断逻辑:

// 下拉选项值 -> 数据库存储值的映射
const impactSaveMap = {
  "Queda de Disponibilidade": "Disponibilidade",
  "Queda de Performance": "Performance",
  "Nenhum": "Nenhum"
};
// 数据库存储值 -> 下拉选项值的反向映射,用于编辑回显
const impactEchoMap = {
  "Disponibilidade": "Queda de Disponibilidade",
  "Performance": "Queda de Performance",
  "Nenhum": "Nenhum"
};

2. 修复注册函数

isteven-multi-select单选模式下,output-model绑定的是数组,直接取第一个元素的name即可:

function cadastrar () {
    // 取选中值,默认兜底为Nenhum
    const selectedName = $scope.impacto.length ? $scope.impacto[0].name : "Nenhum";
    restApi.gerenciamentoMotivosParada.save({
        ...
        impacto_oee: impactSaveMap[selectedName],
    }, ...
}

3. 修复更新函数

和注册逻辑保持一致,不要写混乱的三元判断:

function atualizar () {
    var motivo;
    if ($scope.editing >= 0) {
        const selectedName = $scope.impacto.length ? $scope.impacto[0].name : "Nenhum";
        motivo = {
            ...         
            impacto_oee: impactSaveMap[selectedName]
           ...
        };
    } 
}

4. 补充编辑回显逻辑

打开编辑模态框时,要把服务端返回的枚举值转换成组件能识别的选中项:

// 示例:点击编辑按钮触发的方法,入参为选中的要编辑的motivo
$scope.editarMotivo = function(motivo) {
    $scope.editing = 1;
    // 给多选组件赋值选中状态
    $scope.impacto = [{
        name: impactEchoMap[motivo.impactos]
    }];
    // 其他赋值逻辑...
}

内容的提问来源于stack exchange,提问作者akhaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:57:02