gpt4 book ai didi

javascript - AngularJS ng-repeat 通过不选择初始值来跟踪

转载 作者:行者123 更新时间:2023-11-30 10:11:37 25 4
gpt4 key购买 nike

对 Angular 还是相当陌生,所以请多多包涵。我有一个使用 ng-repeat 生成的单选按钮列表。我将所选对象存储在同一 Controller 上的单独变量中。

所选对象被设置为列表中对象之一的不同实例。我认为由于 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>

这是我的 Controller :

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/LWXe4dFzfdqTOZXmatpQ?p=preview

您只需要确保选定的点指向列表中的内容。它不按值进行比较,而是按引用进行比较。

function MyCtrl($scope) {
$scope.people = [
{ id: 1, name: "John" },
{ id: 2, name: "Paul" },
{ id: 3, name: "George" },
{ id: 4, name: "Frank" }
];
$scope.selected = $scope.people[1];
}

更新您所要做的就是自己编写匹配例程,以匹配生成它自己的对象的任何其他函数的 ID,并在您的 $scope.people 列表中找到相同的对象。例如:

function findSelectedPerson( selected ) {
for( var i = 0; i < $scope.people.length; i++ ) {
if( $scope.people[i].id == selected.id ) return $scope.people[i];
}
return null;
}

这会解决它。

关于javascript - AngularJS ng-repeat 通过不选择初始值来跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com