angularjs - AngularJS 中的全局变量

标签 angularjs global-variables

我在初始化 Controller 范围内的变量时遇到问题。然后,当用户登录时,它会在另一个 Controller 中发生更改。该变量用于控制导航栏等内容,并根据用户类型限制对网站部分内容的访问,因此保持其值很重要。它的问题是初始化它的 Controller ,以某种方式再次被 Angular 调用,然后将变量重置回其初始值。

我认为这不是声明和初始化全局变量的正确方法,它不是真正的全局变量,所以我的问题是正确的方法是什么,是否有任何与当前版本的 Angular 一起使用的好例子?

最佳答案

对于“全局”变量,您基本上有 2 个选项:

$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/

相关文章:

javascript - 使用 AngularJS.js 获取下拉列表中的 JSON 数据?

javascript - ng-view 将不起作用

javascript - 如何仅在从服务器获得响应(数据)后才打开弹出窗口?

angularjs - Angular 下拉默认值不起作用

angularjs - 正确链接 Angular $http 调用吗?

php - 为什么 WordPress 仍然使用 addlashes()、register_globals() 和 magic_quotes?

JavaScript : ReInitialize Global Variable without refreshing the page

javascript - 如何在 Cypress 中访问 baseURL 的值

c# - 在整个命名空间中引用某个变量的最佳方法?

javascript - 如何在不使用全局变量的情况下在 javascript 中存储和访问 ajax 数据?