これは、AngularJS コードを掘り下げてもわかりませんでした。謎の解決に役立つかもしれません。
それを示すために、AngularJS シード プロジェクトにサービスを追加しました。
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);
このプロバイダーが $get と特定の「providerMethod」を公開していることがわかります。
ここで、インジェクションの使用について: config を呼び出すと、クラス全体をインジェクトして、「外部」プロバイダー メソッドにアクセスできます。
serviceModule.config(function(myserviceProvider) {
console.log('myServiceProvider:',myserviceProvider);
myserviceProvider.providerMethod();
});
しかし、これをコントローラーに注入すると (プロバイダーのない名前に注意してください)、$get の戻り値のみが公開されます。
function MyCtrl1(myservice) {
console.log('MyCtrl1.myservice =',myservice,myservice.name);
}
MyCtrl1.$inject = ['myservice'];
コンソール出力は次のとおりです: its my service myServiceProvider: Constructor {providerMethod: function, $get: function} its my service.providerMethod MyCtrl1.myservice = Object {name: "stam"} stam
誰でも違いを説明できますか?理由?考えてくれてありがとう
リオール
PS: angular-ui new ui-router (優れたプロジェクト!)でこの手法を見てきました。ジャスミンやその他の場所でインジェクションを行うには、外部プロバイダー クラスにアクセスする必要があります - 役に立たない