Angular還很新,所以請耐心等待。我有一個使用ng-repeat生成的單選按鈕列表。我將選定的對象存儲在同一控制器上的單獨變量中。AngularJS通過不選擇初始值的ng-repeat軌跡
所選對象正在使用列表中某個對象的不同實例進行設置。我認爲由於ID是相同的,使用「track by」表達式將在列表中選擇正確的項目,但事實並非如此。 如果我選擇一個單選按鈕,它將按預期更新所選變量。
我做錯了什麼?這是不好的模式?
<form name="myForm" ng-controller="MyCtrl">
<label ng-repeat="person in people track by person.id">
<input type="radio" ng-model="$parent.selected" ng-value="person" />
{{person.name}}
</label>
</form>
這裏是我的控制器:
angular.module('ngAppDemo', []).controller('MyCtrl', MyCtrl)
function MyCtrl($scope) {
$scope.selected = { id: 2, name: "Paul" };
$scope.people = [
{ id: 1, name: "John" },
{ id: 2, name: "Paul" },
{ id: 3, name: "George" },
{ id: 4, name: "Frank" }
];
}
這裏是我的Plunker
更新:
我承認這樣一個事實,如果我使用一個對象來自同一個集合,它會奏效。但是,這不是我目前設置的方式。我用於「選定」的實例來自不同的函數,因此不是來自給定的列表。
http://plnkr.co/edit/2bN7ImuFx8yBbBjZcHm2?p=preview - 如果您從服務器獲取新數據,「track by」用於不重新創建DOM元素 – gearsdigital 2014-10-10 18:59:50
http://www.codelord.net/2014/04/15/improve-ng-repeat-performance-with-track-by/ – gearsdigital 2014-10-10 19:05:59