angular.module('myApp')
.controller('MainCtrl', function(debug, ENVIRONMENT), {
// here you can access `debug` and `ENVIRONMENT` as straight variables
})
// app.js or break it up into seperate files
// whatever structure is your flavor
angular.module('myApp', [])
.constant('CONFIG', {
'APP_NAME' : 'My Awesome App',
'APP_VERSION' : '0.0.0',
'GOOGLE_ANALYTICS_ID' : '',
'BASE_URL' : '',
'SYSTEM_LANGUAGE' : ''
})
.controller('GlobalVarController', ['$scope', 'CONFIG', function($scope, CONFIG) {
// If you wish to show the CONFIG vars in the console:
console.log(CONFIG);
// And your CONFIG vars in .constant will be passed to the HTML doc with this:
$scope.config = CONFIG;
}]);
12 回答
你也可以这样做..
我错误地找到了另一种方法:
我做的是声明一个
var db = null
以上的app声明,然后在app.js
中修改它然后当我访问它时controller.js
我能够毫无问题地访问它 . 这个方法可能存在一些问题我认为这是一个很好的解决方案 .试试这个,你不会强制在控制器中注入
$rootScope
.您只能在运行块中使用它,因为配置块不会为您提供$ rootScope的服务 .
这实际上非常简单 . (如果你正在使用Angular 2 . )
只需添加
在组件文件顶部的某处(例如在“import”语句之后),您将能够在组件内的任何位置访问“myGlobalVarName” .
你有“全局”变量的两个选项:
使用
$rootScope
http://docs.angularjs.org/api/ng.$rootScope使用服务http://docs.angularjs.org/guide/services
$rootScope
是所有范围的父级,因此在其中公开的值将在所有模板和控制器中可见 . 使用$rootScope
非常简单,因为您只需将其注入任何控制器并更改此范围内的值即可 . 它可能很方便,但有problems of global variables .服务是可以注入任何控制器并在控制器范围内公开其值的单例 . 作为单身人士的服务仍然是“全球性的”,但你可以更好地控制那些被使用和暴露的地方 .
使用服务有点复杂,但不是那么多,这是一个例子:
然后在控制器中:
这是工作的jsFiddle:http://jsfiddle.net/pkozlowski_opensource/BRWPM/2/
如果您只想存储一个值,根据Angular documentation on Providers,您应该使用Value配方:
然后在这样的控制器中使用它:
使用Provider,Factory或Service可以实现同样的目的,因为它们“只是提供者食谱之上的语法糖”,但使用Value将以最少的语法实现您想要的 .
另一种选择是使用
$rootScope
,但是's not really an option because you shouldn' t使用它是出于同样的原因你应该谨慎使用't use global variables in other languages. It' s advised .由于所有范围都继承自
$rootScope
,如果您有一个变量$rootScope.data
并且有人忘记data
已经定义并在本地范围内创建$scope.data
,则会遇到问题 .如果要修改此值并使其在所有控制器中保持不变,请使用对象并修改属性,并记住Javascript是否通过"copy of a reference":
JSFiddle example
使用
$rootScope
的AngularJS "global variables"示例:控制器1设置全局变量:
控制器2读取全局变量:
这是一个有效的jsFiddle:http://jsfiddle.net/natefriedman/3XT3F/1/
为了向wiki池添加另一个想法,但是AngularJS的value和constant模块呢?我只是开始自己使用它们,但听起来像这些可能是最好的选择 .
注意:截至撰写本文时,Angular 1.3.7是最新的稳定版,我相信这些是在1.2.0中添加的,虽然没有用changelog证实这一点 .
根据您需要定义的数量,您可能希望为它们创建单独的文件 . 但我通常在我的应用程序的
.config()
块之前定义它们以便于访问 . 因为这些仍然是有效的模块,所以您需要依赖依赖注入来使用它们,但它们被认为是您的app模块的"global" .例如:
然后在任何控制器内:
从最初的问题看起来实际上听起来像静态属性无论如何都需要,如可变(值)或最终(常量) . 这是我个人的意见,而不是其他任何东西,但我发现在
$rootScope
上放置运行时配置项太乱了,太快了 .在您的HTML中:
如果我错了请纠正我,但是当Angular 2.0发布时我不相信
$rootScope
会在身边 . 我的猜想是基于$scope
也被删除的事实 . 显然控制器仍然存在,而不是ng-controller
方式 . 转而将控制器注入指令 . 随着即将发布,如果您希望更轻松地从verison 1.X切换到2.0,最好将服务用作全局变量 .如果您保证使用现代浏览器 . 虽然知道你的 Value 观将全部变成字符串 .
还有重新加载之间缓存的便利好处 .
您还可以使用环境变量
$window
,以便在控制器外部声明的全局变量可以在$watch
内查看很奇怪,这些全局值的摘要周期更长,因此并不总是实时更新 . 我需要使用此配置调查该摘要时间 .