【发布时间】:2015-09-07 08:48:09
【问题描述】:
我想通过他的特定对象“id”来订购对象ng-repeat 的结果。这个订单在一个数组中,所以我制作了这个自定义过滤器ng-repeat="line in dataObject|objectIdFilter:orderByArray":
.filter('objectIdFilter', [function() {
return function(inputObjet, orderArray) {
var result = [];
angular.forEach(orderArray, function(value) {
result.push(inputObjet[value]);
});
console.log(result);
return result;
}
}])
这是一个基本控制器示例,其中包含对象和数组中的订单 ID:
.controller('MainCtrl', ['$scope', function($scope) {
$scope.dataObject = {
1: {username:'user1'},
10: {username:'user10'},
20: {username:'user20'},
500: {username:'user500'}
};
$scope.orderByArray = [20,10,1,500];
}])
用他的 HTML:
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<div ng-repeat="line in dataObject|objectIdFilter:orderByArray">{{line.username}}</div>
</div>
</div>
Jsfiddle:https://jsfiddle.net/infnadanada/tLrx4uro/
所以...
一切正常,但我不知道是否有其他方法可以像我在不使用自定义过滤器的情况下那样订购 ng-repeat。
如果您在浏览器控制台中转到 Jsfiddle,您可以看到我的自定义过滤器如何返回 2 倍的结果,我不知道为什么。
PD:英语不是我的第一语言:D
谢谢
【问题讨论】:
-
@intekhab 是针对 datbinding 问题?
apply'sdiggest's..?所以这是一个angularjs原生问题?我可以做点什么来解决这个问题吗? -
我会在控制器中创建 js 函数来执行与您的过滤器“objectIdFilter”相同的操作,并调用它一次,因为每次您对集合进行操作时都会调用过滤器。
-
好的,我明白了。你们是对的,我可以这样做并清除html模板代码。
标签: javascript angularjs filter ng-repeat