javascript - 在 AngularJS 中发出 GET 请求后,在 2 个 Controller 之间共享全局变量失败

标签 javascript angularjs

我正在使用 2 个不同的 Controller ,共享一个全局值 currentOpenningFolder。我希望 2 个 Controller 无论如何都能同步到该变量。但在此示例中,在 GET 请求中,我更改了第一个 Controller 中的变量,但无法在第二个 Controller 中查看该变量。相反,它显示 currentOpenningFolder 的初始值。任何想法为什么会发生这种情况?

      angular.module('scopeExample', [])   
.controller('MyController', ['$scope','currentOpenningFolder','$http', function($scope,currentOpenningFolder,$http) {
            $scope.sayHello = function() {

          $http.get('https://api.github.com/users/chuson1996').then(function(obj){
            currentOpenningFolder = obj;
            console.log(currentOpenningFolder);
          })
        };
      }])
      .controller('MyController2', ['$scope','currentOpenningFolder', function($scope,currentOpenningFolder) {
        $scope.sayHello = function() {
          $scope.currentOpenningFolder = currentOpenningFolder;
          console.log($scope.currentOpenningFolder);
        };
      }])
      .value('currentOpenningFolder',{});

最佳答案

不要像这样将一个对象分配给其他对象:

currentOpenningFolder = obj;

如果您这样指定,currentOpenningFolder 将释放对原始对象的引用并引用其他对象obj。因此,最好的方法是创建 currentOpenningFolder 的属性并将对象分配给该属性,如下所示:

currentOpenningFolder.prop = obj;

然后将其访问到其他 Controller ,例如:

$scope.currentOpenningFolder = currentOpenningFolder.prop;

已编辑:

试试这个 plunkr

关于javascript - 在 AngularJS 中发出 GET 请求后,在 2 个 Controller 之间共享全局变量失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036514/

相关文章:

javascript - 当消息队列变空 -> 非空时,JavaScript 如何收到通知?

javascript - react + 网络包 : 'process.env' is undefined

javascript - 如何在 React Native 中将输入字段添加到列表中?

AngularJS:如何使用 ng-animate 在加载时为 ng-repeat 设置动画

javascript - 过滤多个字段的 Angular-UI typeahead 自动完成功能

c# - 如何从 asp :TextBox when using MaxLength property? 中删除空格

javascript - Javascript 中的图像 slider

javascript - HTML 到图像到 Base64

javascript - ionic 和 angularjs 时间为空

javascript - AngularJS 输入字段在提交后显示 [object Object]