Sto cercando di capire come lavoro con Angularjs. Sembra un buon framework, ma ho bloccato un piccolo problema con DI ...Inject dependencies nel metodo "run" del modulo in Angularjs
Come posso iniettare dipendecie nel metodo "run" del modulo? Voglio dire, sono in grado di farlo, ma funziona solo se ho un servizio/factory/value con lo stesso nome del nome del parametro "run". Costruisco una semplice domanda non illustrare quello che voglio dire:
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 }; });
Perché ho bisogno può chiedere :) Ma nella mia mente, in primo luogo fuori tutti di avere spazi dei nomi significativi per organizzare il codice. Minimizzerà anche la collisione dei nomi e nell'ultimo caso, quando si esegue il minifing del JS, le cose si guasteranno, poiché rinominato per abbreviare i nomi.
C'è un piccolo errore di battitura sul metodo run, seconda staffa non è necessario. –