Angularjsでの作業方法を理解しようとしています。それは素晴らしいフレームワークのように見えますが、私はDIで少し問題に固執しました...Angularjsでのモジュールの "run"メソッドの依存関係の注入
私はモジュールの "実行"メソッドで依存関係を注入することができますか?私はそれを行うことができますが、私は "実行"パラメータ名と同じ名前でサービス/工場/値を持っている場合のみ動作します。 は、私が何を意味するか説明しないシンプルなアプリケーションを構築:コードを整理する意味のある名前空間を持つように
var CONFIGURATION = "Configuration"; //I would like to have App.Configuration
var LOG_SERVICE = "LogService"; //I would like to have App.Services.LogService
var LOGIN_CONTROLLER = "LoginController";
var App = {};
App.Services = {};
App.Controllers = {};
App = angular.extend(App, angular.module("App", [])
.run(function ($rootScope, $location, Configuration, LogService) {
//How to force LogService to be the logger in params?
//not var = logger = LogService :)
LogService.log("app run");
}));
//App.$inject = [CONFIGURATION, LOG_SERVICE]; /* NOT WORKS */
App.Services.LogService = function (config) {
this.log = function (message) {
config.hasConsole ? console.log(message) : alert(message);
};
};
App.Services.LogService.$inject = [CONFIGURATION];
App.service(LOG_SERVICE, App.Services.LogService);
App.Controllers.LoginController = function (config, logger) {
logger.log("Controller constructed");
}
//The line below, required only because of problem described
App.Controllers.LoginController.$inject = [CONFIGURATION, LOG_SERVICE];
App.factory(CONFIGURATION, function() { return { hasConsole: console && console.log }; });
は、なぜ私が最初にすべてオフ、それはあなたが尋ねる:)しかし、私の心の中にも必要です。また、名前の衝突を最小限に抑え、最後に、JSをミニフィッティングするときに、名前がより短くなるように名前が変更されたため、事態が悪化します。
runメソッドの小さなタイプミスがありますが、第2のブラケットは必要ありません。 –