Подтвердить что ты не робот

Инъекция dateFilter в службе в AngularJs

Я хотел бы знать, есть ли способ внедрить фильтры в службу в AngularJs.

Я пытался

app.factory('educationService', [function($rootScope, $filter) {

    // ..... Some code

    // What I want
    console.log(dateFilter(new Date(), 'yyyy-MM-01'));

    // ..... Some code

}]);

Итак, я хотел бы знать, можно ли вводить фильтр в службу или, возможно, он доступен другим способом.

И если у вас есть ссылка на документацию по этому вопросу, было бы очень приятно:) Был поиск в документе Angular, и я не нашел в этом ничего полезного.

Спасибо:)

4b9b3361

Ответ 1

Сначала вам нужно вставить фильтр следующим образом:

app.factory('myService', ['$rootScope', '$filter', function($rootScope, $filter) 

(Массив нужен только тогда, когда вы используете минимизацию в процессе сборки)

Программный вызов специального фильтра:

$filter('date')(new Date(), 'yyyy-MM-01');

$filter(name) возвращает определенную функцию фильтра, которую вы можете вызвать с помощью своих аргументов:

var dateFilter = $filter('date');
var filteredDate = dateFilter(new Date(), 'yyyy-MM-01')

Ответ 2

Функция фильтра регистрируется с помощью $injector под именем фильтра, помеченным Filter. - $filterProvider docs

Это верно для встроенных фильтров Angular, а также для собственных пользовательских фильтров.

Итак, вы можете ввести dateFilter в свою службу, как это (если не уменьшить):

app.factory('educationService', [function($rootScope, dateFilter) {

Если вы используете только один фильтр, этот метод позволяет более точно определять ваши фактические зависимости. Если вам нужно использовать несколько фильтров, вы можете добавить $filter, как показано на странице @Stewie.