web-dev-qa-db-fra.com

Injecter dateFilter dans un service dans AngularJs

Je voudrais savoir s'il existe un moyen d'injecter les filtres dans un service dans AngularJs.

J'ai essayé

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

    // ..... Some code

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

    // ..... Some code

}]);

Je voudrais donc savoir s'il est possible d'injecter un filtre dans un service ou peut-être qu'il est accessible d'une autre manière.

Et si vous avez un lien vers une documentation sur ce point, ce serait vraiment sympa :) J'ai cherché dans le doc de Angular et je n'ai rien trouvé de vraiment utile à ce sujet.

Merci :)

35
Julien Rodrigues

Vous devez d'abord injecter le filtre comme ceci:

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

(Le tableau n'est nécessaire que lorsque vous utilisez la minification dans votre processus de construction)

Pour appeler un filtre spécifique par programme:

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

$filter(name) renvoie la fonction de filtre spécifique, que vous pouvez ensuite appeler avec vos arguments:

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

La fonction de filtrage est enregistrée avec le $injector sous le nom du filtre suffixé de Filter. - $ filterProvider docs

Cela est vrai pour les filtres intégrés Angular, ainsi que pour vos propres filtres personnalisés.

Ainsi, vous pouvez injecter le dateFilter dans votre service comme ceci (si ce n'est pas en minifiant):

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

Si vous n'utilisez qu'un seul filtre, cette méthode vous permet d'être plus précis sur vos dépendances réelles. Si vous devez utiliser plusieurs filtres, vous pouvez injecter $filter comme le montre @Stewie.

46
Mark Rajcok