2014-11-20 93 views
0

我学习AngularJS,并试图将我现有的网站利用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

你有什么上面是不是一个过滤器,它只是你的控制器上的方法。

要创建过滤器,你可以这样做:

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

+0

疑难杂症。就像我说的,我对此很新,所以我不知道。你发布的内容是有道理的,我试过了......但由于某种原因,它似乎还没有做任何事情。 – user3144632 2014-11-20 18:32:52

+0

你删除您控制器的范围的功能? – Brocco 2014-11-20 20:07:34

相关问题