'daki modülün "run" yöntemindeki bağımlılıkları enjekte etme Angularjs ile nasıl çalışacağımı anlamaya çalışıyorum. Güzel bir çerçeveye benziyor, ama DI ile ilgili küçük bir sorunla karşılaştım ...Angularjs
Modülün "run" yöntemine bağımlılıkları nasıl enjekte edebilirim? Bunu yapabildiğimi kastediyorum, ancak yalnızca "run" parametre adıyla aynı ada sahip hizmet/fabrika/değerim varsa çalışır. Ne demek istediğimi göstermek do basit bir uygulama oluşturmak: kodunu düzenlemek için anlamlı ad alanlarını olması
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 }; });
Neden her şeyden önce kapalı, bunu sormak :) Ama aklımda olabilir gerekir. Ayrıca isim çarpışmasını en aza indirecek ve son olarak, JS'yi minimize ederken, isimler daha fazla kısaltmak için yeniden adlandırıldığı için işler bozuluyor.
çalıştırma yöntemine küçük yazım hatası yok, ikinci braket gerekli değildir. –