Angularjs ng-repeat 过滤了一个 属性,属性 重复问题
Angularjs ng-repeat filtered by one property, property duplicate issue
我想按球队过滤我的数组并显示每个球队的所有球员,但如果球队名称相似,例如。 'team beta' 和 'team beta z' 出现重复问题。
球员在两支球队中都显示...
这里是示例代码:
https://jsfiddle.net/lukasz9999/qpqsuvc5/1/
我觉得问题出在过滤方法上
<div ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams">
<b>{{playerPerTeam.team}}</b>
<li ng-repeat="player in players | filter:{team: playerPerTeam.team} | filter:searchFilter">{{player.name}}</li>
</div>
$scope.players = [{name: 'Gene', team: 'team alpha'},
{name: 'George', team: 'team beta'},
{name: 'Steve', team: 'team gamma'},
{name: 'Paula', team: 'team beta'},
{name: 'Paula2', team: 'team beta z'},
{name: 'Scruath of the 5th sector', team: 'team gamma'}];
var indexedTeams = [];
$scope.playersToFilter = function() {
indexedTeams = [];
return $scope.players;
}
$scope.filterTeams = function(player) {
var teamIsNew = indexedTeams.indexOf(player.team) == -1;
console.log("nt "+teamIsNew)
if (teamIsNew) {
indexedTeams.push(player.team);
}
return teamIsNew;
}
- 此代码生成此列表:
- 阿尔法团队
- 基因
- 团队测试版
- 乔治
- 保拉
- 宝拉2
- 团队伽马
- 史蒂夫
- 第 5 区的 Scruath
- 团队测试版 z
- 宝拉2
name: Paula2 应该只在 "team beta z" 中,但也在 "team beta" 中。
感谢您的任何建议
您必须在您使用的 ng-repeat="" 末尾使用 track by $index
。
通过这样做,angular 使用数组中的索引而不是它们的值来标识元素。
示例:
ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams track by $index"
将 true
放在过滤器语句之后即可。所以,
filter:{team: playerPerTeam.team}
应该是
filter:{team: playerPerTeam.team}:true
精确匹配。 https://docs.angularjs.org/api/ng/filter/filter
你可以看到 plunker
我想按球队过滤我的数组并显示每个球队的所有球员,但如果球队名称相似,例如。 'team beta' 和 'team beta z' 出现重复问题。 球员在两支球队中都显示...
这里是示例代码: https://jsfiddle.net/lukasz9999/qpqsuvc5/1/
我觉得问题出在过滤方法上
<div ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams">
<b>{{playerPerTeam.team}}</b>
<li ng-repeat="player in players | filter:{team: playerPerTeam.team} | filter:searchFilter">{{player.name}}</li>
</div>
$scope.players = [{name: 'Gene', team: 'team alpha'},
{name: 'George', team: 'team beta'},
{name: 'Steve', team: 'team gamma'},
{name: 'Paula', team: 'team beta'},
{name: 'Paula2', team: 'team beta z'},
{name: 'Scruath of the 5th sector', team: 'team gamma'}];
var indexedTeams = [];
$scope.playersToFilter = function() {
indexedTeams = [];
return $scope.players;
}
$scope.filterTeams = function(player) {
var teamIsNew = indexedTeams.indexOf(player.team) == -1;
console.log("nt "+teamIsNew)
if (teamIsNew) {
indexedTeams.push(player.team);
}
return teamIsNew;
}
- 此代码生成此列表:
- 阿尔法团队
- 基因
- 团队测试版
- 乔治
- 保拉
- 宝拉2
- 团队伽马
- 史蒂夫
- 第 5 区的 Scruath
- 团队测试版 z
- 宝拉2
name: Paula2 应该只在 "team beta z" 中,但也在 "team beta" 中。
感谢您的任何建议
您必须在您使用的 ng-repeat="" 末尾使用 track by $index
。
通过这样做,angular 使用数组中的索引而不是它们的值来标识元素。
示例:
ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams track by $index"
将 true
放在过滤器语句之后即可。所以,
filter:{team: playerPerTeam.team}
应该是
filter:{team: playerPerTeam.team}:true
精确匹配。 https://docs.angularjs.org/api/ng/filter/filter
你可以看到 plunker