【发布时间】:2015-10-11 16:09:21
【问题描述】:
我正在尝试从 http 端点设置一些应用程序范围的常量。我不想(或不需要)通过手动引导方式(ala this)来做到这一点。理想情况下,我想在用户登录后加载常量。所以我假设我需要在可以运行一些代码的地方定义常量(并使用 $http)。但是每当我在控制器或配置块中定义一个常量时,当我将它传递给另一个模块时,该常量会给出一个未知的提供程序错误。一旦我将定义移到控制器之外,它就会起作用。例如,如果我有 ...
var app = angular.module('testApp',[]);
app.constant('test', 'test value');
然后我可以像这样将它传递给另一个模块的控制器:
var app2 = angular.module('anotherModule',[testApp]);
app2.controller('TestCtrl', ['test',
function(test) {
console.log(test)`
}..
这将像您期望的那样输出“测试值”。但是,如果常量是在代码块中定义的,那么它似乎没有注册为提供者。所以,例如:
var app = angular.module('testApp',[]);
app.controller('firstCtrl',function(){
app.constant('test', 'test value');
}
如果我使用该控制器运行一个页面,则该常量似乎已注册(从某种意义上说,它列在 testApp 模块的 _invokeQueue 数组中)但注入器服务没有它的提供程序,我得到一个anotherModule 上的未知提供程序方法。
我最初觉得工厂或服务对于我想做的事情来说太过分了,但也许这就是我应该走的路。但我也很想了解为什么像这样定义的常量是不可注入的。
【问题讨论】:
-
可以将其声明为对象...然后扩展该对象
-
Module.constant 是一个角度概念,似乎非常适合我正在尝试做的事情,但如果我在代码块中定义它,我就无法让它成为可注入的。我希望对为什么会这样以及如何以编程方式定义可注入的常量有所了解。
-
你想通过在控制器中定义一个常量来实现什么?常量是否依赖于来自控制器的数据?
-
没错。我基本上想以一种可以在登录后控制器中初始化数据的方式将一些静态数据共享给各种控制器。常数似乎是最合乎逻辑的结构。我最终使用了一个在解析过程中调用的服务作为路由的一部分——所以它发生在用户登录之后。解析的对象被注入到需要该数据的控制器中。相当复杂的解决方案,但如果我想在控制器中定义它,我无法让它作为一个简单的常量工作。