2015-05-18 1 views
0

я определил свой собственный фильтр для того, чтобы найти через посты в angular.js веб-приложения:Как получить доступ к переменным области видимости внутри директивы в angular.js?

app.filter('myfilter', function() { 
return function(postList, term) { 
    var out = []; 

    if(!postList) return out;  
    if(!term) return postList; 

    var i; 
    for(i = 0; i < postList.length; i++){ 
    if(postList[i].title.indexOf(term) >=0){ 
     out.push(postList[i]); 
    } 

    if($scope.isContentFilterOn.checked){ 
     if(postList[i].text.indexOf(term) >=0){ 
       out.push(postList[i]); 
      } 
     } 
    } 
    } 
    return out; 
} 
}); 

Конечно выше, не будет работать, потому что я не могу получить доступ к области видимости переменных и просто передача $scope не работает. Как я могу это сделать - есть ли простой и быстрый способ?

Edit: источник http://plnkr.co/edit/G9BFBTaKdUmki8MJegrn?p=catalogue

+0

можно дублировать вопрос: http://stackoverflow.com/questions/17596246/access-scope-variables-from-a-filter-in-angularjs –

+1

уверен, видеть мое редактировать –

+0

Это какие услуги были сделаны. Создайте api, чтобы удерживать состояние фильтра, и пусть контроллер и директива используют их как – richbai90

ответ

0

Вы можете передать любое количество членов области видимости непосредственно к фильтру (разделенных двоеточием) ...

myfilter:filterTerm:isContentFilterOn 

Обновление метод фильтра подписи ...

Затем используйте его, как вы хотите ...

if (isContentFilterOn) { 

Ох, и не забывайте, что вы, возможно, потребуется определить isContentFilterOn в объеме как ложные, чтобы начать с так он доступен для фильтра сразу ...

$scope.isContentFilterOn = false; 

Обновлено Plunker здесь, чтобы показать, что я имею в виду. ..

http://plnkr.co/edit/vPTBws0JBpwvKY0ywCPC?p=preview

+0

Также fyi вы не используете ** isContentFilterOn.checked ** просто ** isContentFilterOn ** (так как ng-модель решит true или false, потому что элемент флажка может иметь только 2 значения (checked/unchecked, т.е. true/false). – brenters

Смежные вопросы