能否在AngularJS常量中使用普通JavaScript文件中的变量?
在AngularJS常量中使用普通JavaScript文件的变量可行吗?
我想在AngularJS常量中使用普通JavaScript文件里的变量,请问这可行吗?以下是我尝试的代码:
普通JavaScript文件代码
"use strict"; var CONST_MAP = { 'key': 'value' };
AngularJS文件代码
'use strict'; angular.module('foo').constant('bar', { 'test': CONST_MAP });
当然可行!不过有个核心前提你得注意:必须让普通JavaScript文件在AngularJS文件之前加载。这样当Angular去定义bar常量的时候,CONST_MAP已经存在于全局作用域中了,不会出现未定义的错误。
你当前的写法本身是有效的——你把包含CONST_MAP的对象赋值给了bar常量,之后在Angular的控制器、服务等组件里注入bar后,就能通过bar.test.key获取到对应的值。
不过这里给你提个小建议,为了避免全局变量命名冲突(毕竟全局作用域很容易被污染),可以给你的常量包裹一个命名空间,或者用立即执行函数表达式(IIFE)来封装:
优化后的普通JS文件
(function(window) { "use strict"; // 用更独特的命名空间降低冲突概率 window.MyAppGlobalConstants = { 'key': 'value' }; })(window);
对应的AngularJS代码
'use strict'; angular.module('foo').constant('bar', { 'test': window.MyAppGlobalConstants });
如果你的项目用到了模块加载器(比如RequireJS),那可能需要调整加载逻辑,通过模块依赖的方式引入普通JS文件,但如果是传统的<script>标签加载方式,只要保证顺序正确就完全没问题。
内容的提问来源于stack exchange,提问作者user1766169
相关产品推荐
相关产品推荐

