修改控制器AngularJS的全局值

Modify a global value from a controller AngularJS

本文关键字:全局 AngularJS 控制器 修改      更新时间:2023-09-26

我试图修改一个控制器中的全局值,并在另一个控制器上使用它,但该变量保留旧值。

app.js

var app = angular.module('PressRoom', []);
app.value('globals',
    {
        companyName: 'My company',
        appName: 'My app',
        user: {
            name: 'Test user',
            img: '',
            role: ''
        }
    });

我想修改它的控制器

app.controller('LoginController', ['$scope','globals',function($scope,globals)
{
    $scope.globals = globals;
    globals.user.name = "Brand new user";
    // Redirect to dashboard.
}]);

修改了我想使用的控制器。

app.controller('DashboardController', ['$scope','globals',function($scope,globals,)
{
    $scope.globals = globals;
}]);

在最后一个控制器的视图中,我在指令上使用全局值,但它显示的是Test user,而不是Brand new user

你不能。但是,您可以创建一个具有getter和setter的服务,并以与使用值相同的方式使用它。不用说,你甚至可以更聪明一点,创建一个可以用作密钥和价值存储的服务。例如,MyDataStore.set("myVal",1)MyDataStore.get("myVal")。但为了简单起见,这里有一个简单的Service演示了我建议的方法。

angular.module("my", [])
  .service("MyValue", function() {
    return {
      set: function(val) {
        this.val = val;
      },
      get: function() {
        return this.val;
      }
    }
  })
  .run(function(MyValue) {
    MyValue.set("Initial Value");
  })
  .controller("MyController", function(MyValue) {
    console.log(MyValue.get()); //prints Initial Value
    MyValue.set("New Value");
    console.log(MyValue.get()); //prints New Value
  })

https://jsfiddle.net/oL0m2f7j/1/

使用$rootScope变量并在工厂/服务内部声明(不在控制器中)

这样,您就可以在整个应用程序中使用它,并可以将该值复制到本地范围,或者在需要时覆盖它。

app.factory('MyFactory', MyFactory);
function MyFactory() {
    $rootScope.userName = '';
}
app.controller('MyController', MyController);
function MyController() {
    $scope.desiredName = $rootScope.userName;
    $scope.desiredName = 'Your desired value';
}