2013-09-23 27 views
0

我想使用某種工廠方法在兩個控制器之間共享數據。控制器Ctrl1屬於發送HTTP請求的第一個DIV標記,並且以流方式接收來自服務器的數據。而在其他DIV標籤中,我想將結果顯示爲一個列表(ng-repeat),它隨着第一個DIV中的HTTP結果得到更新而不斷更新(第二個DIV標籤在第一個DIV標籤第一個時刻開始顯示結果反應,第一個DIV消失)。我知道如何在控制器之間傳遞一次數據(例如ng-click =「pass()」),但不知道如何實現這一點。我正在尋找一個不使用$ rootScope的答案。在不斷更新的兩個控制器之間共享數據

+0

以及以下內容:https://www.google.com/search?q=sharing+data+angular&oq=angularjs+sharing+data&sourceid=chrome&ie=UTF-8#q=angularjs+sharing+data+ – Cherniv

+0

我使用Google搜索它但我發現共享動態數據的答案使用了$ rootScope。如果可能的話,我正在尋找一種以不同方式進行處理的答案。謝謝。 – Sangram

+0

爲什麼你不想使用$ rootScope在控制器之間共享數據? –

回答

0

您應該創建一個服務來包含數據,然後將服務注入到每個控制器中。

例如,讓我們有一個屬性「富」相當於一個字符串「酒吧」定義「爲​​myService」服務:

angular.module('myModule').service('myService', function() { 
    this.foo = 'bar'; 
}); 

我們現在可以在控制器使用像這樣:

angular.module('myModule').controller('MyCtrl', function($scope, myService) { 
    $scope.myService = myService; 
}); 

現在可以像平常一樣在模板中使用{{myService.foo}}ng-model="myService.foo"

然後,您可以以類似的方式在第二個控制器中使用它,當更新任一控制器中的屬性'foo'時,更改將在控制器之間持續存在。這是因爲angular中的服務是單例。通過定義這樣的服務,你正在做的是創建一個單獨的'myService',它可以在任何你想要的地方注入,並且只會被實例化一次。

如果您需要監視控制器代碼中的更改,可以像往常一樣在myService.foo上使用$ scope。$ watch()。

相關問題