首页 > 解决方案 > 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'}]

标签: angularjsangularjs-ng-repeatangular-ngmodel

解决方案


好的,这是因为您正在使用 Array.fill 填充 self.data ,当与对象一起使用时,通过引用而不是值传递。

如果您将 self.data 的声明更改为此

self.data = [];
self.data.push({dataType:null},{dataType:null});

它会起作用的。


推荐阅读