Angular JS: pourquoi la différence entre le module.config d'injection et de contrôleur de l'injection?

C'est quelque chose que je ne pouvais pas comprendre de creuser dans le code AngularJS, peut-être vous pouvez aider à résoudre le mystère.

Pour le montrer, j'ai ajouté un service AngularJS projet de semences:

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);

Vous pouvez voir que ce fournisseur expose $get et un certain "providerMethod'.

Maintenant, pour l'injection d'utilisation:
Si nous appelons de config, on peut injecter de l'ensemble de la classe et d'avoir accès à 'l'extérieur' fournisseur méthode:

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

Mais quand nous injecter à un contrôleur (notez le Fournisseur moins de nom), seul le $obtenez la valeur de retour est exposée:

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

Sortie de la Console suit comme il se doit:
son mon service
myServiceProvider:
Constructeur {providerMethod: la fonction, $get: function}
son mon service.providerMethod
MyCtrl1.myservice = Objet {nom: "stam"} stam

Peut-on expliquer la différence? La raison?
merci beaucoup pour toute pensée

Lior

PS: j'ai vu cette technique dans angular-ui nouveau ui-router (excellent projet!). J'ai besoin d'accéder à l'extérieur fournisseur de classe pour faire de l'injection de jasmin et d'autres endroits - en vain

InformationsquelleAutor Lior | 2013-03-27