我正在学习AngularJS并尝试转换现有网站以使用AngularJS组件。我有一个过滤器,显示我用于导航的顶级链接。我在多个控制器中使用它:
$scope.topLevelLinks = function(link) {
if (link.parent_id == 0) {
return link;
}
};
当我将上面的代码添加到每个控制器时,当我调用它时,它完全符合我的要求:
<li data-ng-repeat="link in links | filter: topLevelLinks">
但是,我正在尝试将它添加到我的模块中,所以我不必在两个控制器中编写它,我似乎无法让它工作。我没有收到任何错误,只是没有过滤我的链接:
app.factory('NavigationService', ['$http', function($http) {
return {
getLinks: function () {
return $http({
method: 'GET',
url: '/navigation',
headers: {
'Content-Type': 'application/json'
}
});
}
};
}]).filter('topLevelLinks', function() {
return function(link) {
if (link.parent_id == 0) {
return link;
}
};
}).controller('NavigationCtrl', ['$scope', '$http', 'NavigationService', function ($scope, $http, $nav) {
$scope.links = [];
$nav.getLinks().success(function(data) {
$scope.links = data;
});
$scope.hasChildren = function(link) {
return link.children.length > 0;
};
}]).controller('NavigationAdminCtrl', ['$scope', '$http', 'NavigationService', function ($scope, $http, $nav) {
$scope.links = [];
$nav.getLinks().success(function(data) {
$scope.links = data;
});
}]);
我将非常感谢能得到的任何帮助!
答案 0 :(得分:0)
上面的内容不是过滤器,它只是控制器上的一种方法。
要创建过滤器,您可以执行以下操作:
angular.module('moduleName').filter('topLevelLinks', function(input){
var output = [];
for (var i=0; i<input.length; i++){
if (input[i].parent_id == 0) {
output.push(input[i]);
}
}
return output;
});
然后你可以像这样使用它:
<li data-ng-repeat="link in links | filter: topLevelLinks">
您可以找到更多信息here。