You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AngularJS中ng-repeat内input加ng-model后ng-value值消失求助

解决AngularJS中添加ng-model后ng-value值消失的问题

这个问题我之前也碰到过,本质是AngularJS里ng-modelng-value的优先级逻辑导致的——当你同时给<input>设置这两个指令时,ng-model会优先接管输入框的值渲染,如果ng-model绑定的变量没有初始化或者值为空,输入框自然就显示空白了。

下面给你几个可行的解决方案:

1. 直接绑定ng-model到已有属性(最推荐)

因为你的输入框是readonly状态,不需要用户修改,完全可以直接把ng-model绑定到item.BEN_BENCHMARK_GEOGRAPHY,这样既保留了原有值,又符合AngularJS的数据绑定逻辑:

<div ng-repeat="item in benchmarGeographyObj"> 
  <div style="padding-right: 60px;float:left;"> 
    <input readonly style="width: 100%;" type="text" id="unik" ng-model="item.BEN_BENCHMARK_GEOGRAPHY" /> 
  </div> 
</div>

只要item.BEN_BENCHMARK_GEOGRAPHY本身有值,绑定后输入框就会直接显示内容,而且readonly属性会阻止用户修改,完美替代原来的ng-value用法。

2. 手动初始化ng-model绑定的变量

如果你确实需要使用独立的ng-model变量(比如后续可能要修改但暂时设为只读),那要在控制器中提前给这个变量赋值,把item.BEN_BENCHMARK_GEOGRAPHY的值传递过去:
比如在你的控制器里添加这段代码:

$scope.benchmarGeographyObj.forEach(function(item) {
  // 给每个item新增一个用于绑定的属性,比如命名为inputValue
  item.inputValue = item.BEN_BENCHMARK_GEOGRAPHY;
});

然后修改模板中的input:

<div ng-repeat="item in benchmarGeographyObj"> 
  <div style="padding-right: 60px;float:left;"> 
    <input readonly style="width: 100%;" type="text" id="unik" ng-model="item.inputValue" /> 
  </div> 
</div>

这样ng-model绑定的变量有了初始值,输入框就能正常显示内容了。

3. 记住核心逻辑:ng-model优先级高于ng-value

在AngularJS的指令优先级规则里,ng-model的优先级是高于ng-value的,当两者同时存在时,输入框的显示值完全由ng-model绑定的变量决定。所以要么让ng-model直接关联已有值的属性,要么给ng-model的变量初始化值,才能避免空白的情况。

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

火山引擎 最新活动