2013-07-05 41 views
41

Tôi cần lọc danh sách các mục theo danh mục của chúng. Tôi muốn người dùng có thể nhấp vào nút và sau đó có bộ lọc được áp dụng cho danh sách.AngularJS Lọc Đối sánh chính xác

Hiện tại, tôi làm việc này ở mức độ nào đó.

Hãy nói ví dụ tôi có một danh sách các phim ảnh, render như vậy:

<li ng-repeat="movie in movieList | filter:filters">{{ movie.title }}</li> 

Và tôi cũng có một danh sách các thể loại phim (render như nút, mà khi nhấp vào sẽ lọc danh sách những bộ phim) kết xuất như vậy:

<li ng-repeat="genre in genres"> 
    <a ng-click="filters.genre = genre.name" ng-click='changeGenre(genre.name)'>{{genre.name}}</a> 
</li> 

(Tất cả chức năng 'changeGenre()' cập nhật phạm vi thể hiện thể loại hiện đang được xem).

Bây giờ điều này hoạt động tốt cho đến khi tôi có một tình huống mà, nói rằng tôi có 2 thể loại: 'Hành động' và 'Hành động Phiêu lưu'. Khi tôi lọc theo phim với thể loại 'Hành động', tôi không chỉ nhận được danh sách các bộ phim Hành động, mà còn có cả phim Hành động Phiêu lưu.

Có cách nào để tôi có thể khớp chính xác bằng bộ lọc không?

+1

Tin rằng bạn muốn viết bộ lọc tùy chỉnh http://www.youtube.com/watch?v=zdfseHACtCg – shaunhusain

Trả lời

106

này hiện đang được cung cấp tự nhiên bên trong bộ lọc. Bạn có thể chuyển đúng cho bộ lọc để bật kết hợp chặt chẽ.

<li ng-repeat="movie in movieList | filter : filters : true">{{ movie.title }}</li> 

Refereces

https://docs.angularjs.org/api/ng/filter/filter

https://stackoverflow.com/a/18243147/1466430

+1

Cảm ơn bạn đã cập nhật thông tin. Điều này dễ dàng hơn nhiều. – chrispr

+0

Chính xác những gì tôi đang tìm kiếm cảm ơn – deKajoo

+0

Cảm ơn! Đã dành cho tôi rất nhiều thời gian –

8

filter cũng có thể thực hiện chức năng nơi bạn có thể triển khai bộ lọc của riêng mình. Tôi đã thực hiện một plunker hiển thị nó trong hành động: http://plnkr.co/edit/v0uzGS?p=preview

Dưới đây là các mã có liên quan:

$scope.ChooseGenreFunction = function(genre) { 
    $scope.filters = function(movie) { 
    return movie.genre === genre; 
    }; 
}; 
$scope.ChooseGenreString = function(genre) { 
    $scope.filters = genre; 
}; 
+0

Cảm ơn người đàn ông! Bạn là một anh hùng –

+2

@ jtseng đã chỉnh sửa câu trả lời của bạn để sử dụng '===' thay vì '== ' – bguiz

28

Trong trường hợp ai đó muốn sử dụng bộ lọc ở phía JavaScript bạn có thể làm điều đó thích:

$scope.filtered = $filter('filter')($scope.movieList, { genre.name: filters.genre}, true); 

Thông báo sự thật ở cuối ... nó chỉ ra rằng là searc h cho kết hợp chính xác.

+3

Cảm ơn bạn đã thêm phiên bản JS! – mhodges

+0

Cảm ơn bạn đã trợ giúp. Đã tiết kiệm rất nhiều thời gian. –

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