2015-05-04 57 views
0

我正在使用2個不同的控制器共享全局值currentOpenningFolder。我希望2個控制器都可以同步到該變量,無論如何。但在本例中,在GET請求中,我更改了第一個控制器中的變量,但我無法在第二個控制器中查看該變量。相反,它顯示的初始值爲currentOpenningFolder。任何想法,爲什麼這可能會發生?在2個控制器之間共享全局變量在AngularJS中發出GET請求後失敗

 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',{}); 

回答

1

不分配一個對象到另一個對象是這樣的:

currentOpenningFolder = obj; 

如果分配,因爲這,currentOpenningFolder將失去參考原始對象,並參考其他對象obj。所以要做到這一點最好的辦法是創建的currentOpenningFolder一個屬性,並指定對象到prperty這樣的:

currentOpenningFolder.prop = obj; 

,然後訪問該到其他控制器,如:

$scope.currentOpenningFolder = currentOpenningFolder.prop; 

編輯:

試試這個plunkr

+0

代替我已經試過了,它仍然無法正常工作:( –

+0

請你創建plunkr或小提琴? –

+0

http://plnkr.co/edit/1TCTQIXrEhKtirkOlkw1?p=preview –

0

一個非常簡單的修復方法是擴展現有的對象而不是取代它。更換它導致引用被打破

變化

currentOpenningFolder = obj; 

angular.extend(currentOpenningFolder , obj); 

這使得現有對象不變(和其他參考資料),併合並變爲它。

同樣在控制器中,我不確定爲什麼在一個函數中設置指向currentOpenningFolder的範圍變量。你可能想聲明它的函數

外面沒有看到更多的代碼,好像$scope.sayHello=function(...$scope.currentOpenningFolder = currentOpenningFolder;

相關問題