试图理解AngularJS的"过滤器"功能,大多数示例都在视图/ HTML端有过滤器,但我需要在控制器/ JS端.
这有效
$scope.getPickedPeopleCount = function(){
var thisCount = 0;
angular.forEach($scope.allPeople, function(person){
if(person.PICKED){thisCount++}
});
return thisCount;
}
Run Code Online (Sandbox Code Playgroud)
但这失败了
$scope.getPickedPeopleCount = function(){
return $scope.allPeople.filter(PICKED:'true').length;
}
Run Code Online (Sandbox Code Playgroud)
显然我的语法错了,有人能指出我正确的方向
Jos*_*ler 19
要在控制器中使用过滤器,必须注入$ filter服务,然后按名称请求过滤器:
function MyCtrl ( $scope, $filter ) {
var filter = $filter('filter'); // could be orderBy, etc.
// more code...
$scope.getPickedPeopleCount = function () {
return filter( $scope.allPeople, { PICKED: 'true' } ).length;
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*cok 11
除了@Josh的答案之外,还可以使用filterName Filter语法将过滤器(预定义的Angular和自定义过滤器)注入控制器,指令,自定义过滤器等.例如,filterFilter,dateFilter,myCoolSortFilter等.来自$ filterProvider文档:
过滤器函数使用后缀为过滤器名称的$ injector注册
Filter
.
您可以通过这种方式更加具体地了解真正的依赖关系(尽管注入$ filter可以访问所有Angular过滤器).
function MyCtrl ( $scope, filterFilter ) {
// more code...
$scope.getPickedPeopleCount = function () {
return filterFilter( $scope.allPeople, { PICKED: 'true' } );
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5699 次 |
最近记录: |