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,当与对象一起使用时,passes by reference not value.

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

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

它会起作用。