Angular JS: Warum der Unterschied zwischen module.config Injection und Controller Injection?

Dies ist etwas, was ich nicht herausfinden konnte, wenn ich mich in den AngularJS-Code vertiefte. Vielleicht können Sie dabei helfen, das Rätsel zu lösen.

Um es zu zeigen, habe ich dem AngularJS-Seed-Projekt einen Service hinzugefügt:

function MyServiceProvider() {
    console.log('its my service');
    this.providerMethod = providerMethod;

    function providerMethod() {
        console.log('its my service.providerMethod');
    }

    this.$get = $get;

    function $get() {
        var innerInjectable = {
             name: 'stam'
        };
        return innerInjectable;
    }
}

var serviceModule = angular.module('myApp.services', []).
    value('version', '0.1').
    provider('myservice',MyServiceProvider);

Sie können sehen, dass dieser Anbieter $ get und eine bestimmte 'providerMethod' verfügbar macht.

Nun zur Injection-Verwendung: Wenn wir config aufrufen, können wir die gesamte Klasse injizieren und erhalten Zugriff auf die 'äußere' Provider-Methode:

serviceModule.config(function(myserviceProvider) {
    console.log('myServiceProvider:',myserviceProvider);
    myserviceProvider.providerMethod();
});

Wenn wir dies jedoch in einen Controller einspeisen (notieren Sie sich den Namen ohne Provider), wird nur der Rückgabewert $ get verfügbar gemacht:

function MyCtrl1(myservice) {
    console.log('MyCtrl1.myservice =',myservice,myservice.name);
}
MyCtrl1.$inject = ['myservice'];

Die Konsolenausgabe erfolgt wie gewünscht: myServiceProvider: Constructor {providerMethod: function, $ get: function} myService.providerMethod MyCtrl1.myservice = Object {name: "stam"} stam

Kann jemand den Unterschied erklären? Der Grund? vielen dank für jeden gedanken

Lior

PS: Ich habe diese Technik in Angular-Ui gesehenNeu Ui-Router (ausgezeichnetes Projekt!). Ich benötige Zugriff auf die äußere Anbieterklasse, um Injektionen in Jasmin und an anderen Orten durchführen zu können - ohne Erfolg

Antworten auf die Frage(2)

Ihre Antwort auf die Frage