2014-02-10 2 views
3

У меня есть сценарий, где я хочу, чтобы пользователь мог выбрать, какой фильтр применять. Я не хочу содержать отдельный список фильтров в html. Поэтому рассмотрим следующий код, где я пытаюсь получить доступ к именам зарегистрированных фильтров. (Я новичок в AngularJS, так что извиняюсь, если это очевидно)Как я могу перечислить доступные фильтры

angular.module('app.filters', []); 

angular.module('app.filters').filter('filter1', function() {/* filter code */}); 

angular.module('app.filters').filter('filter2', function() {/* another filter code */}); 

angular.module('app', ['app.filters']); 

angular.module('app').controller('MainCtrl', function ($scope, $filter) { 

    /* How do I list filter1 and filter2 in here so that they can be output 
     in a template? The below means the filter names are recorded twice */ 

    $scope.availableFilters = ['filter1', 'filter2'] 
}); 

ответ

2

Я полагаю, что это невозможно. Но вы можете получить эту информацию, если вы подключаете в $filterProvider:

.config(function($filterProvider, $provide) { 
    // keep the original register fucntion 
    var registerFn = $filterProvider.register; 
    // array with all filters 
    var allFilters = []; 

    // replace the register function with our own implementation 
    $filterProvider.register = function(name, fn){ 
     // save the name in the array 
     allFilters.push(name); 
     // call the original function 
     registerFn(name, fn); 
    } 

    // register a value to retrieve the filters 
    $provide.value('filters', allFilters); 

}) 

Значение filters может теперь использоваться в контроллере, вводя его:

.controller('MainCtrl', function(filters){ 
    // outputs an array with all known filters 
    console.log(filters); 
}) 
Смежные вопросы