2013-06-14 25 views
5

Tôi cần thay đổi biến số $scope bên trong bộ lọc. Biến số $scope được sử dụng cho thuộc tính ng-show và thông tin chỉ được gắn trong bộ lọc vì tôi có ng-repeat với một số thông tin và được một số bộ lọc áp dụng và tôi cần biết khi nào bộ lọc xóa tất cả kết quả của tôi để hiển thị thông báo ... đây là một ví dụ: (đây chỉ là một ý tưởng)

.controller("thing", function() { 
    $scope.showText = false; 
}) 

.filter("filterText", function() { 
    return function(information) { 
    if (information == "") { /* NEED TO CHANGE $scope.showText to true */ } 
    } 
}) 

HTML:

<div ng-view="showText"> Some Text here </div> 
<div ng-repeat="info in information | filterText"></div> 

Cảm ơn.

+9

Bạn có nghĩ bộ lọc nên truy cập bộ điều khiển và thay đổi thông tin không? Tại sao nên làm thế? Không phải là một hành động điều khiển kích hoạt nếu showText nên thay đổi? –

+0

Bạn đang đi sai hướng. Tôi đồng ý với @PetarMinchev, bộ lọc không được quan tâm hoặc có quyền truy cập vào bộ điều khiển hoặc phạm vi. Theo định nghĩa, các bộ lọc chỉ quan tâm đến dữ liệu đầu vào được truyền vào có thể bị giảm và không có gì hơn. Với thông tin giới hạn được đưa ra về những gì bạn đang cố gắng đạt được, từ một quan điểm cấp cao, bạn nên sử dụng một ràng buộc một chiều để theo dõi nếu 'thông tin | filterText' có độ dài bằng không. – tamakisquare

+1

bộ lọc không bao giờ nên thay đổi dữ liệu được cung cấp, vì điều này có thể gây ra nhiều chu kỳ '$ digest' và làm chậm hiệu suất. Đặt bất cứ thứ gì bạn cần vào bộ điều khiển. – g00fy

Trả lời

4

Tôi đồng ý với nhận xét rằng có thể bạn không muốn thay đổi dữ liệu trong bộ lọc ngay từ đầu nhưng nếu bạn thực sự bị ép cứng, bạn có thể đạt được điều này bằng cách xác định chức năng bộ lọc bên trong bộ điều khiển của mình (chứ không phải là "bộ lọc" góc thực tế) và sau đó chỉ sử dụng nó như vậy:

ng-repeat="item in items | filter:myFilter()" 

$scope.myFilter = function(item) { 
    // access to scope here 
} 
Các vấn đề liên quan