2015-10-19 154 views
1

我正在嘗試使用AngularJS爲動態列表創建編輯器。對於每個項目,我想添加一個包含列表中所有元素選項的選擇列表。當一個項目被添加到列表(JSFiddle中的添加按鈕)時,其他選擇會丟失它們的值。模型不受這個影響,只有視圖。我錯過了什麼?更新選項時,使用ng-repeat的角度選擇丟失選定選項

這是我的JSFiddle

查看:

<div ng-controller="selectDemoCtrl">{{msg}} 
    <table> 
     <tr> 
      <td>id</td> 
      <td>references</td> 
     </tr> 
     <tr ng-repeat="item in items"> 
      <td> 
       <input ng-model="item.id" type="number"> 
      </td> 
      <td> 
       <select ng-model="item.ref"> 
        <option ng-repeat="i in items" value="i.id" ng-selected="item.ref==i.id">{{i.id}}</option> 
       </select> 
       </td> 
     </tr> 
    </table> 
    <button ng-click="addItem()">Add</button> 
    <div>{{items | json}}</div> 
</div> 

控制器:

selectDemo.controller('selectDemoCtrl', function ($scope) { 
    $scope.items = [{ 
     id: 1, 
     ref: 2 
    }, { 
     id: 2, 
     ref: 1 
    }]; 

    $scope.addItem = function(){ 
     var newitem = {id: 1, ref:1}; 
     for (var i = 0; i < $scope.items.length; i++){ 
      if ($scope.items[i].id >= newitem.id) { newitem.id = $scope.items[i].id + 1; } 
     } 
     if ($scope.items.length > 0){newitem.ref = $scope.items[0].id;} 
     $scope.items.push(newitem); 
    }; 
}); 

回答

2

不要使用ngRepeat,這是不可靠的結合模式。使用ngOptions相反,它應該按預期工作:

<select ng-options="i.id as i.id for i in items" ng-model="item.ref"></select> 

演示:https://jsfiddle.net/4bemy5wj/1/