【发布时间】:2014-10-10 18:49:17
【问题描述】:
对于 Angular 来说还是个新手,所以请多多包涵。我有一个使用 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
更新:
我认识到如果我使用来自同一个集合的对象,它将起作用。但是,这不是我目前的设置方式。我用于“选定”的实例来自不同的函数,因此并非来自给定的列表。
【问题讨论】:
-
plnkr.co/edit/2bN7ImuFx8yBbBjZcHm2?p=preview –
track by习惯于在从服务器获取新数据时不重新创建 DOM 元素
标签: javascript angularjs angularjs-ng-repeat