我在控制器的作用域上初始化变量时遇到问题。然后,当用户登录时,它将在另一个控制器中进行更改。此变量用于控制诸如导航栏之类的操作,并根据用户的类型来限制对网站某些部分的访问,因此保持其值很重要。它的问题是初始化它的控制器,再次通过某种方式被调用,然后将变量重置为其初始值。
我认为这不是声明和初始化全局变量的正确方法,也不是真正的全局变量,所以我的问题是什么是正确的方法,并且在使用当前版本的angular时,周围是否有很好的例子?
对于“全局”变量,您基本上有2个选项:
$rootScope
$rootScope是所有作用域的父项,因此公开的值将在所有模板和控制器中可见。使用$rootScope非常容易,因为您可以将其简单地注入任何控制器并在此范围内更改值。它可能很方便,但是存在全局变量的所有问题。
服务是单例,您可以将其注入任何控制器并在控制器的作用域中公开它们的值。作为单例的服务仍然是“全局的”,但是您已经更好地控制了它们的使用和公开位置。
使用服务稍微复杂一点,但不算多,下面是一个示例:
var myApp = angular.module('myApp',[]); myApp.factory('UserService', function() { return { name : 'anonymous' }; });
然后在控制器中:
function MyCtrl($scope, UserService) { $scope.name = UserService.name; }
这是工作中的jsFiddle:http : //jsfiddle.net/pkozlowski_opensource/BRWPM/2/