私はAngularJS 1.xで作業しています。同じモジュールで同じサービスを複数回定義できます。次のコードスニペットでは、私はモジュールmyApp
にサービスをnameService
2回を定義しています:「2番目の定義」:同じモジュール内でAngularJSサービスを複数回宣言する
(function() {
'use strict';
angular
.module('myApp', [])
.controller('MainController', MainController)
.factory('nameService', nameService1)
.factory('nameService', nameService2);
MainController.$inject = ['nameService'];
function MainController(nameService) {
var vm = this;
vm.message = nameService.getName();
}
function nameService1() {
return {
getName: getName
};
function getName() {
return 'First Definition';
}
}
function nameService2() {
return {
getName: getName
};
function getName() {
return 'Second Definition';
}
}
})();
実行時には、AngularJSは、サービスの第2の実施によって返された値を使用します。 this Plunker exampleを確認してください。
したがって、経験的に、AngularJSは、常に以前のものを無視して、サービスの最新の定義を使用しているようです。
私の質問です:この動作を記述する正式な文書はありますか?
JavaScriptは2番目のnameServiceに遭遇したときに前のものに優先します – aliasav
JavaScriptは順番にコンパイルできますが、すでに定義されているサービスの2番目の定義を見つけたときに何をすべきかを決定するAngularフレームワークです。たとえば、常に最初のインスタンスを保持し、他のインスタンスを破棄することに決めることができますが、それとは逆に、常に最後のインスタンスを維持するように見えます。 私の質問です:この動作についての公式文書はありますか? – Andrea