我有一个问题,我在控制器中的范围上初始化一个变量。然后,当用户登录时,它会在另一个控制器中更改。此变量用于控制导航栏等内容,并根据用户类型限制对网站部分的访问,因此保留其值很重要。它的问题是,初始化它的控制器,通过角度一些如何被再次调用,然后将变量重置回其初始值。
我认为这不是正确的方式声明和初始化全局变量,它不是真正的全局变量,所以我的问题是什么是正确的方法,有什么好的例子,围绕当前版本的角度的工作。
对于“全局”变量,基本上有两个选项:
>使用$ rootScope http://docs.angularjs.org/api/ng.$rootScope
>使用服务http://docs.angularjs.org/guide/services
$ rootScope是所有范围的父级,所以暴露的值将在所有模板和控制器中可见。使用$ rootScope非常容易,因为您可以简单地将它注入任何控制器并更改此范围中的值。这可能很方便,但所有的problems of global variables。
服务是单例,可以注入到任何控制器,并在控制器的范围内公开它们的值。服务,单身人士仍然是“全球性的”,但你已经更好地控制了那些使用和暴露的地方。
使用服务有点复杂,但不是那么多,这里是一个例子:
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/