AngularJS 1.x benutzerdefinierter Filter kann nicht injiziert werden, unbekannter Anbieter

8

Ich versuche, einen benutzerdefinierten Filter zu erstellen, aber wenn ich versuche, ihn in meinen Controller zu injizieren, erhalte ich den Fehler 'Unbekannter Provider'. Ich habe alle Referenzen überprüft und doppelt überprüft, aber ich kann nicht sehen, was falsch ist.

Ich weiß, dass die Datei in meiner index.html korrekt referenziert ist, sie ist geladen und kann vom Inspektor gefunden werden. Dies ist der Code, den ich habe:

In meiner app.js:

%Vor%

Mein Filter:

%Vor%

Und der Controller:

%Vor%

Natürlich ist das ziemlich vereinfacht, aber es funktioniert einfach nicht und ich kann nicht verstehen warum. Ich habe mehrere Dienste geleistet und sie arbeiten und spielen nett miteinander.

    
stinaq 16.04.2014, 09:30
quelle

4 Antworten

9

Sie müssen den Filter nicht selbst injizieren.

Dieser Code ...

%Vor%

Sollte

sein %Vor%

Und in CourseCtrl sollten Sie Ihren Filter wie gewohnt verwenden.

Das Modul 'equiclass.filters' in Ihr Modul 'equiclass.controllers' einfügen ist genug.

Ich hatte ein ähnliches Problem und machte einen Beitrag darüber auf meinem Blog .

- Bearbeiten

Wie n00dl3 unten erwähnt wird, ist die automatische Benennungskonvention in Angular. Wenn Sie Ihren Filter specialNumberFilter benennen, müssen Sie ihn beim Injizieren als specialNumberFilterFilter bezeichnen. Dies ermöglicht Ihnen, den Filter als eine Funktion zu verwenden, die es ist.

// In a controller vm.data = specialNumberFilterFilter(vm.data, 'a');

Aber ich glaube, Sie können den Filter auch verwenden, ohne ihn in einen Controller zu injizieren, wenn er in einem Zeichenfolgenausdruck verwendet wird, der z. B. von einer Uhr ausgewertet wird, da dies dem Szenario bei der Verwendung entspricht in einer Vorlage.

// Inside a watch - no controller injection required '$scope.$watch('vm.data | specialNumberFilter', function(new, old) { ... })'

    
seangwright 20.09.2014, 03:50
quelle
14

Wenn Sie einen Filter innerhalb eines Controllers verwenden wollen, müssen Sie $filter attribut Ihrem Controller zufügen und können darauf zugreifen wie

%Vor%

Sie können wie

verwenden %Vor%     
BKM 16.04.2014 09:31
quelle
4

Laut Angulars Dokumentation:

, wenn Sie Ihren Filter in einer Vorlage verwenden möchten

Dann müssen Sie es nur in Ihr Modul injizieren und es dann wie folgt verwenden {{ expression | filter }} oder {{ expression | filter:argument1:argument2:... }} .

doc

, wenn Sie Ihren Filter in einem Controller, einer Direktive und in stuffs verwenden möchten:

injiziere eine Abhängigkeit mit dem Namen <filterName>Filter , wie folgt:

%Vor%

doc

Also für diesen speziellen Fall:

%Vor%     
n00dl3 19.03.2015 09:47
quelle
2

Sie haben nicht erwähnt, ob es in der Produktion oder auf einem lokalen Server ist, aber für den Fall, dass Sie Ihre Dateien minimieren, versuchen Sie Folgendes:

%Vor%     
nurinur 16.06.2014 11:25
quelle

Tags und Links