是否可以在不注入的情况下访问常量?

时间:2016-02-08 13:35:20

标签: angularjs

我在项目中使用gulp-ng-config在构建时动态生成一些常量。

这工作得很好,但它让我和一位同事思考如何在角度应用程序中访问常量。

如果要访问在常量所属的同一模块上定义的控制器中的常量,是否仍需要按名称将常量注入控制器,以便可以访问它们的值?

看一下各种例子,我很确定这是唯一的方法 - 只是想知道是否还有其他方法不需要注入进一步的依赖。

2 个答案:

答案 0 :(得分:1)

常数注入是最佳实践方法的一部分。 这只是一个语法上的开销,阻止你做一些不好的事情,比如定义全局变量并在整个地方使用它们。 当然你仍然可以继续在全局窗口范围内定义变量并在任何地方使用它们,但我不建议这样做。

所以你可以做到

window.foo = 123;

和其他地方

alert (window.foo);

这将显示想要的值,但当然,这是非常糟糕的做法。

您还可以在角度$ rootScope上定义变量并在任何地方使用它们。然而,最重要的是,这只不过是在窗口范围内定义它们,也不应该这样做。

最后一个选项(可能最适合您的场景)是定义一个包含更多值的常量OBJECT。这样你只需要注入一个常量对象而不是许多不同的对象。

说你到目前为止有两个常数 $ width = 1024 $ height = 768

定义一个可注射常数

没什么不好

$ config = {   宽度:1024,   身高:768 };

如果您只想从角度世界外部访问$常量,您可以像这样:

angular.element( '主体')。注射器()。得到( '$常数')

假设您在'body'元素上或甚至更远的外部声明了ng-app(如'html'元素)。

答案 1 :(得分:0)

这是依赖注入的用途:强制您显示模型的所有依赖项。

否则你可以使用注射器并使用方法$ get来获取值,但我不推荐它。

最后一种方法是使用提供程序来存储所有常量并仅注入生成的服务。但是,这将掩盖每个常量来自哪个模块。