javascript - ng-repeat 中的 ng-model 不更新参考对象
问题描述
在我的控制器中,我有一个对象:
$scope.selectedMap = {
map: '', mapDesc: '', stops_json: "", stopLength: []
};
此对象中的stops_json键包含另一个对象,如下所示:
{
desc: "PRG-BUD-HR-PAY",
stop1:"DEPT",
stop2:"ACCT",
stop3:"ACCT2",
stop4: 158,
stop5:"CCT",
stop6:"CCA",
stop7: 156
}
我在 ng-repeat 中使用这个子对象,并为每个停止生成输入:
<p class="row col-md-12">
<strong>Description: </strong>{{ selectedMap.stops_json.desc }}
</p>
<div class="row col-md-12 float-left">
<md-input-container ng-repeat="stop in selectedMap.stops_json" ng-if="!$first" ng-model="stop" class="col-md-12">
<label>Stop {{ $index }}:</label>
<input class="col-md-8 float-left mapStops" ng-model="stop" aria-label="Route Stop Description">
</md-input-container>
</div>
我的问题是,当我更改输入标签的值时,stops_json对象不会改变。我的印象是它应该这样做,因为那是被建模的对象。我明显错了,有人可以教育我吗?
解决方案
先说几个问题:
- 用于迭代对象的符号
ng-repeat
是(key, value) in obj
- 如果您选择使用对象迭代,
ng-repeat
那么您的ng-if
依赖$first
是不确定的(即不能保证以键定义顺序进行迭代) - 应用
ng-model
绑定以ng-repeat
使其组成部分可编辑是不正确的——应该ng-model
应用每个项目的模型
我已经创建了您的片段的精简示例,以演示使重复输入能够更改stops_json
模型。
基本上,您需要确保直接绑定到模型中的input
元素,以便任何编辑都会影响它。ng-repeat
stops_json
另外,请注意,所有数字属性都应使用 的type="number"
变体input
,否则任何编辑都会将值设置为字符串。
推荐阅读
- postgresql - 尝试恢复 Sonarqube 数据库后 PostgreSQL 错误“关系不存在”
- ios - Swift 5反射获取类属性列表并调用它们
- java - 我们可以为 Kafka Producer 分配源端口吗?
- python - 类型错误:edit_undo() 接受 1 个位置参数,但给出了 2 个
- java - Java 14 中的 Lambda 表达式和“?:”运算符
- python - Pygame Sprite 在移动时会留下痕迹
- javascript - 使用 ES lint 错误希望在不禁用它或更改规则的情况下解决
- azure - azure webapp 您无权查看此目录或页面
- amazon-web-services - AWS SES 允许跟踪邮件是否发送或失败
- python - CI / CD管道的Postgresql数据库错误