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

AngularJS中ng-model值无法在<select>中显示的问题排查

问题分析与解决

先看你的核心HTML代码:

<label class="item item-input item-stacked-label" ng-repeat="nl in normativas">
  <select ng-model="nl.idResultado">
    <option value="1">OK</option>
    <option value="2">NOT</option>
    <option value="3"> MAYBE </option>
  </select>
</label>
<button ng-click="guardarNormativas()"> Guardar</button>

你碰到的问题根源很明确:AngularJS的ng-model匹配是严格相等(===)校验,这里大概率是「数据类型不匹配」导致的下拉框无法默认选中。

为啥创建视图正常,编辑视图不行?

创建视图时,你从空数组开始选择选项,此时nl.idResultado会被AngularJS设置为字符串类型(因为HTML里<option>的value属性本质就是字符串)。如果你的保存逻辑把这个字符串转成了数字存入SQLite,那么从数据库取出时nl.idResultado会是数字类型——数字1和字符串"1"用===比较是不相等的,自然无法匹配到对应的选项。

解决方法(选其一即可)

方法1:用ng-value指定数字类型(推荐)

把<option>的value换成ng-value,让AngularJS直接把值当成数字绑定,和你从数据库取出的数字类型完全匹配:

<label class="item item-input item-stacked-label" ng-repeat="nl in normativas">
  <select ng-model="nl.idResultado">
    <option ng-value="1">OK</option>
    <option ng-value="2">NOT</option>
    <option ng-value="3"> MAYBE </option>
  </select>
</label>
<button ng-click="guardarNormativas()"> Guardar</button>

方法2:把数据库返回的idResultado转成字符串

如果不想修改HTML,可以在获取数据库数据后,统一把每个nl.idResultado转成字符串,和HTML里的option value类型对齐:

// 假设从数据库拿到的原始数据是dbNormativas
$scope.normativas = dbNormativas.map(item => {
  item.idResultado = item.idResultado.toString();
  return item;
});

方法3:保存时把idResultado转成字符串

在guardarNormativas()函数里,先把选中的数值转成字符串再存入数据库,这样取出的字符串就能和HTML里的value直接匹配:

$scope.guardarNormativas = function() {
  $scope.normativas.forEach(nl => {
    nl.idResultado = nl.idResultado.toString();
  });
  // 执行SQLite保存逻辑
};

不确定类型的话,可以在编辑视图的label里加个调试输出:{{nl.idResultado + ' 类型:' + typeof nl.idResultado}},就能直观看到是数字还是字符串,再针对性选解决方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:28