angularjs - Angularjs 绑定更新了 ng-repeat 中的所有选择
问题描述
当我在 ng-repeat 中使用 ng-model 时,它会更新该重复循环内的所有 ng-model。如果我删除数据类型并直接设置为 myCtrl.data[$index] 它工作正常。
有什么建议么?
模板:
<div ng-repeat="i in myCtrl.data track by $index">
<div>
<div>
<select
ng-model="myCtrl.data[$index].datatype"
ng-options="item.value as item.label for item in myCtrl.detailTypes track by item.label"
>
<option value="" disabled selected>
select an option
</option>
</select>
</div>
</div>
</div>
控制器:
self.detailTypes = [
{label: 'KEY_1', value: 'VAL_1'},
{label: 'KEY_2', value: 'VAL_2'},
];
self.data = new Array(2).fill({dataType: null});
当我选择 KEY_1 进行第一次选择时,它会将对象更改为 [{dataType: 'VAL_1'}, {dataType: 'VAL_1'}]
解决方案
好的,这是因为您正在使用 Array.fill 填充 self.data ,当与对象一起使用时,通过引用而不是值传递。
如果您将 self.data 的声明更改为此
self.data = [];
self.data.push({dataType:null},{dataType:null});
它会起作用的。
推荐阅读
- python - 即使我的模型默认使用时区日期,我仍然收到天真的日期警告
- ruby-on-rails - Rails - 哈希值的排序和最大值
- xml - 我们如何使用 Google 表格中的 =IMPORTXML 函数从自定义属性或使用 Angular 生成的属性中获取数据?
- android - 使用 DiffUtils ImageViews 更新 RecycleView 时闪烁
- reactjs - 从 Material UI 的 TextField 中获取选择开始、结束和选择值
- django - Pythonanywhere TemplateDoesNotExist 位于 /accounts/login/
- assembly - 在装配中反转输出
- asp-classic - 将垂直值与水平表标题连接起来
- html - Html Paypal 付款和电子邮件用户同时
- python - 带有 Flask-Security 的 PyTest - 发出登录以进行测试