在Angularjs模块的"run"方法中注入依赖项。
在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进行缩小时,事情会变得混乱,因为它被重命名为更短的名称。