2013-01-08 47 views
5

Cố gắng hiểu chức năng "bộ lọc" của AngularJS hầu hết các ví dụ đều có bộ lọc ở phía bên xem/HTML nhưng tôi cần nó ở phía bộ điều khiển/JS.AngularJS cố gắng hiểu bộ lọc js

này hoạt động

$scope.getPickedPeopleCount = function(){ 
    var thisCount = 0; 
    angular.forEach($scope.allPeople, function(person){ 
     if(person.PICKED){thisCount++} 
    }); 
    return thisCount; 
    } 

nhưng điều này không

$scope.getPickedPeopleCount = function(){ 
    return $scope.allPeople.filter(PICKED:'true').length; 
    } 

Rõ ràng cú pháp của tôi là sai, ai đó có thể chỉ cho tôi đi đúng hướng

Trả lời

19

Để sử dụng một bộ lọc trong một bộ điều khiển, bạn phải tiêm dịch vụ lọc $ và sau đó yêu cầu bộ lọc theo tên:

function MyCtrl ($scope, $filter) { 
    var filter = $filter('filter'); // could be orderBy, etc. 

    // more code... 

    $scope.getPickedPeopleCount = function() { 
    return filter($scope.allPeople, { PICKED: 'true' }).length; 
    } 
} 
+0

Nên cung cấp cho bạn điểm thưởng để hiểu câu hỏi. –

11

Ngoài câu trả lời của @ Josh, bộ lọc (những cái góc được xác định trước, và bộ lọc tùy chỉnh của bạn) cũng có thể được chèn vào bộ điều khiển, chỉ thị, bộ lọc tùy chỉnh, v.v ... sử dụng cú pháp Bộ lọc filterName. Ví dụ, filterFilter, dateFilter, myCoolSortFilter, vv Từ $filterProvider tài liệu:

Chức năng lọc được đăng ký với $ phun dưới tên bộ lọc với hậu tố Filter.

Bạn có thể cụ thể hơn về phụ thuộc thực sự theo cách này (mặc dù tiêm $ filter cho phép bạn truy cập vào tất cả các bộ lọc góc).

function MyCtrl ($scope, filterFilter) { 
    // more code... 

    $scope.getPickedPeopleCount = function() { 
    return filterFilter($scope.allPeople, { PICKED: 'true' }); 
    } 
} 
+0

@ MarkRajcok- Đây là một điểm tốt. +1 –

Các vấn đề liên quan