Angularjs에서 모듈의 "실행" 방식으로 종속성 주입
Angularjs를 어떻게 다루는지 이해하려고 노력 중이야좋은 틀처럼 보이지만, DI에 대한 작은 문제가 남아서...
모듈의 "실행" 방식으로 종속성을 주입하려면 어떻게 해야 합니까?즉, 실행할 수 있지만 "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를 축소할 때 이름 단축을 위해 이름이 변경되었기 때문에 작업이 중단됩니다.
그 이유는
App.$inject = [CONFIGURATION, LOG_SERVICE];
동작하지 않습니다.다른 2개의 파라미터가 있기 때문입니다.$rootScope
&$location
주사할 필요가 있습니다.$inject
따라서 다음과 같이 해야 합니다.
App.$inject = ["$rootScope", "$location", CONFIGURATION, LOG_SERVICE];
서비스를 주입할 수 있는 또 다른 방법은 다음 버전을 사용하는 것입니다.
app.run(["$rootScope", "$location", CONFIGURATION, LOG_SERVICE,
function ($rootScope, $location, Configuration, LogService) {
}] );
언급URL : https://stackoverflow.com/questions/14688290/inject-dependencies-in-run-method-of-the-module-in-angularjs
'programing' 카테고리의 다른 글
tslint에 대해 특정 디렉토리 또는 파일을 무시하는 방법 (0) | 2023.03.06 |
---|---|
POST 대신 OPTIONS로 전송된 Angular로부터의 HTTP 요청 (0) | 2023.03.06 |
Internet Explorer의 JavaScript에서 'JSON'이 정의되지 않은 오류입니다. (0) | 2023.03.06 |
Spring Boot 401 보안 없음에도 인증되지 않음 (0) | 2023.03.06 |
Spring Runner vs Spring Boot시험 (0) | 2023.03.06 |