我在初始化 Controller 范围内的变量时遇到问题。然后,当用户登录时,它会在另一个 Controller 中发生更改。该变量用于控制导航栏等内容,并根据用户类型限制对网站部分内容的访问,因此保持其值很重要。它的问题是初始化它的 Controller ,以某种方式再次被 Angular 调用,然后将变量重置回其初始值。
我认为这不是声明和初始化全局变量的正确方法,它不是真正的全局变量,所以我的问题是正确的方法是什么,是否有任何与当前版本的 Angular 一起使用的好例子?
最佳答案
对于“全局”变量,您基本上有 2 个选项:
- 使用
$rootScope
http://docs.angularjs.org/api/ng.$rootScope - 使用服务 http://docs.angularjs.org/guide/services
$rootScope
是所有范围的父级,因此公开的值将在所有模板和 Controller 中可见。使用 $rootScope
非常简单,因为您只需将其注入(inject)任何 Controller 并更改此范围内的值即可。它可能很方便,但拥有所有 problems of global variables .
服务是单例,您可以将其注入(inject)任何 Controller 并在 Controller 的范围内公开它们的值。作为单例的服务仍然是“全局的”,但您可以更好地控制这些服务的使用和公开位置。
使用服务有点复杂,但也不是那么复杂,下面是一个例子:
var myApp = angular.module('myApp',[]);
myApp.factory('UserService', function() {
return {
name : 'anonymous'
};
});
然后在 Controller 中:
function MyCtrl($scope, UserService) {
$scope.name = UserService.name;
}
这是工作中的 jsFiddle:http://jsfiddle.net/pkozlowski_opensource/BRWPM/2/
关于angularjs - AngularJS 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938380/