我有一个问题,我在控制器的范围上初始化一个变量。然后当用户登录时,它在另一个控制器中被更改。该变量用于控制导航栏等内容,并根据用户类型限制对站点部分内容的访问,因此保持其值很重要。它的问题是,初始化它的控制器,被angular以某种方式再次调用,然后将变量重置回初始值。
我认为这不是声明和初始化全局变量的正确方式,好吧,它并不是真正的全局,所以我的问题是,正确的方式是什么?有没有什么好的例子可以在当前版本的angular中使用?
我有一个问题,我在控制器的范围上初始化一个变量。然后当用户登录时,它在另一个控制器中被更改。该变量用于控制导航栏等内容,并根据用户类型限制对站点部分内容的访问,因此保持其值很重要。它的问题是,初始化它的控制器,被angular以某种方式再次调用,然后将变量重置回初始值。
我认为这不是声明和初始化全局变量的正确方式,好吧,它并不是真正的全局,所以我的问题是,正确的方式是什么?有没有什么好的例子可以在当前版本的angular中使用?
当前回答
localStorage.username = 'blah'
如果你用的是现代浏览器的话。尽管知道你的值都将被转换成字符串。
也有方便的好处被缓存之间重新加载。
其他回答
localStorage.username = 'blah'
如果你用的是现代浏览器的话。尽管知道你的值都将被转换成字符串。
也有方便的好处被缓存之间重新加载。
// 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;
}]);
在你的HTML中:
<span ng-controller="GlobalVarController">{{config.APP_NAME}} | v{{config.APP_VERSION}}</span>
AngularJS使用$rootScope创建全局变量的例子:
控制器1设置全局变量:
function MyCtrl1($scope, $rootScope) {
$rootScope.name = 'anonymous';
}
控制器2读取全局变量:
function MyCtrl2($scope, $rootScope) {
$scope.name2 = $rootScope.name;
}
这是一个工作的jsFiddle: http://jsfiddle.net/natefriedman/3XT3F/1/
你也可以这样做。
function MyCtrl1($scope) {
$rootScope.$root.name = 'anonymous';
}
function MyCtrl2($scope) {
var name = $rootScope.$root.name;
}
您还可以使用环境变量$window,以便在控制器外部声明的全局变量可以在$watch内部进行检查
var initWatch = function($scope,$window){
$scope.$watch(function(scope) { return $window.globalVar },
function(newValue) {
$scope.updateDisplayedVar(newValue);
});
}
注意,使用这些全局值时,摘要周期更长,因此并不总是实时更新。我需要研究这个构型下的消化时间。