2016-06-06 4 views
0

Hier ist das Stück Code in AngularJS Ich schreibe 1.5.5 genannt bekommen:

export default angular.module(
    'myApp', []) 
    .provider('finder', function finderProvider() { 
    this.$get = $get; 

    function $get() { 
     console.log('GET'); 
    } 

    this.callMe =() => { 
     console.log('CALLED'); 
    }; 
    }) 
    .config(['finderProvider', function(finderProvider) { 
    //finderProvider.$get(); 
    finderProvider.callMe(); 
    }]) 
    .name; 

Ich versuche später einen Dienst in diesem Anbieter zu injizieren. Ich habe in der Dokumentation gelesen, dass ich nur einen Service innerhalb eines Providers mit der Methode $ get() einfügen kann. Ich kann $ get() jedoch nicht automatisch aufrufen. Das funktioniert nur, wenn ich $ get() manuell in dem Abschnitt anrufe, in dem ich den Anruf kommentiert habe. Aber es scheint mir nicht richtig zu sein, $ get manuell zu bekommen.

In diesem Beispiel wird nur 'CALLED' protokolliert. Irgendeine Idee, was ich hier vermisse?

BEARBEITEN. Ich versuchte, eine andere Syntax unter Verwendung der Pfeilfunktion zu verwenden, aber erhielt das gleiche Resultat:

.provider('finder',() => { 
    return { 
     $get:() => { 
     console.log('GET'); 
     }, 
     callMe:() => { 
     console.log('CALLED'); 
     } 
    }; 
    }) 

Dank im Voraus.

+0

ein dicker Pfeil behandelt 'this' anders als eine Funktion. Was passiert, wenn Sie Ihr erstes Beispiel auch auf einen dicken Pfeil aktualisieren? –

+0

@DavidL Ich habe versucht, es mit den Pfeilfunktionen zu ändern, aber ich bekomme die gleichen Ergebnisse. Ich habe meinen ursprünglichen Post mit meinen neuen Änderungen aktualisiert. – mohi666

+0

Es muss mehr los sein als das, was du hier gepostet hast. Es gibt keinen Grund, warum das nicht funktionieren sollte. –

Antwort

2

Eckige Dienste werden langsam instanziiert.

Die Dienstanbieter-Konstruktorfunktion wird aufgerufen, wenn sie während der Konfigurationsphase (config Block oder anderer Anbieter) eingespeist wird.

$get wird aufgerufen, wenn die Service-Instanz nach der Konfigurationsphase injiziert wird.

Im obigen Beispiel finder Service wird nirgendwo injiziert, Service-Instanz wird nicht erstellt und $get Funktion wird nicht aufgerufen.

+0

In meinem Beispiel injiziere ich das Angebot in der Zeile mit: .config (['finderProvider', function (finderProvider). Es sieht so aus, als ob AngularJS das "Provider" Suffix automatisch hinzufügt. Sollte ich meinen Provider mit einer anderen Syntax injizieren? – mohi666

+0

' FinderProvider 'und' Finder' sind zwei verschiedene Dinge: Der erste ist Dienstanbieter, der andere ist Dienstinstanz. 'FinderProvider' kann in' config' Block injiziert werden, 'Finder' kann in' run' Block injiziert werden, nicht – estus

+0

Vielen Dank für die Klarstellung Ich habe nur meinen Provider in config() benutzt, deshalb wurde $ get() nicht verwendet Ich fand es ein wenig verwirrend warum es einen Fehler ausgelöst hat, wenn $ get() wasn 'war Wenn $ get() da war, wurde es nicht verwendet, ich wünschte, ich wüsste das früher – mohi666

Verwandte Themen