在Angularjs模块的"run"方法中注入依赖项。

22 浏览
0 Comments

在Angularjs模块的"run"方法中注入依赖项。

我试图理解如何使用Angularjs。它看起来是一个不错的框架,但是我在依赖注入方面遇到了一点问题…

我想知道如何在模块的“run”方法中注入依赖项。我的意思是,我可以做到,但只有当我有一个与“run”参数名称相同的服务/工厂/值时才能工作。

我构建了一个简单的应用程序来说明我的意思:

var CONFIGURATION = "Configuration"; //我希望有一个App.Configuration
var LOG_SERVICE = "LogService"; //我希望有一个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) {
                //如何强制LogService成为参数中的日志记录器?
                //不是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");
}
//下面的这一行,只是因为上面描述的问题而需要
App.Controllers.LoginController.$inject = [CONFIGURATION, LOG_SERVICE];
App.factory(CONFIGURATION, function () { return { hasConsole: console && console.log }; });  

你可能会问我为什么需要它但是在我看来,首先是为了有有意义的命名空间来组织代码。这也将最小化名称冲突,并且最后,在JS进行缩小时,事情会变得混乱,因为它被重命名为更短的名称。

0