2014-09-22 67 views
1

我想用角度來分享控制器之間的一些信息。我知道這不是一件難事,我在這裏找到了一些很好的例子,但是我有一些奇怪的情況,就是如何引入和更改我想分享的數據。我試圖申請一些其他的例子,我發現這個工作得到了,但似乎無法得到這個工作,所以我會盡我所能地解釋清楚。角度,在控制器之間共享(在它被填充之後?)

問題

我所試圖做的是非常簡單的。我有一些下拉值我試圖在控制器之間共享。因此,無論登陸時有何價值,以及何時出現價值變化,都會顯示在另一個控制器中。

問題是我建立了一個大工廠,所有的控制器都會調用它來填充它們的輸入,有10個控制器,每個都有一堆必須在着陸時填充的輸入,所以我有一個工廠對存儲在變量中的每個$ http調用使用$ q.all函數,然後調用另一個調用來查看是否保存了任何數據,並將默認值更改爲保存的值。 如果可能,我寧願保留此方法。我到處使用它,改變它可能是一種痛苦。

所以工廠的樣子:

var criteria1 = $http({method: "GET", url: "/crit1"}); 
var criteria2 = $http({method: "GET", url: "/crit2"}); 
var criteria3 = $http({method: "GET", url: "/crit3"}); 

    return { 
critera: $q.all([criteria1 ,criteria2, criteria3]) 
} 

在控制器然後我做了:

getDefaults.criteria.then(function(data){ 

//fill out defaults and values for selects with this data 

//then get saved data (if any) 
$http({ 
      method: "GET", 
      url: "/getsavedData/" + sectionID 
     }) 
     .success(function(data, status, headers, config){ 
     //if data !null then overrite scopes for defaults 
     }; 

所以我試圖做的,然後分享2個選擇列表上這個值控制器與另一個。我提供了這個例子 - http://jsfiddle.net/HB7LU/6510/。但我似乎無法弄清楚如何將這個應用到我正在做的事情上。主要是因爲數據是在控制器外部確定的,需要從中共享數據。我試圖避免這一點,但如果這是最好的方法,那麼我應該改變它。

我想要填充輸入,得到默認值,然後與控制器共享信息(當它也改變時共享)。如果我可以做類似於2路數據綁定的操作,但是在控制器之間,所以我正在輸入的控制器始終提供選擇列表答案的信息,這將是理想的。我一直在努力爭取這一點,這應該很容易,我想我只是在錯誤地思考它。任何方向將不勝感激。感謝您花時間閱讀!

+0

爲什麼不直接將檢索到的數據設置到服務中的公共屬性上,並讓每個感興趣的控制器都看這些數據? – 2014-09-22 15:52:36

+0

類似[this](http://stackoverflow.com/questions/21452040/angularjs-sharing-methods-between-controllers/21452417#21452417),但你需要設置'var msg = ...'到結果你的$ q.all()。 – 2014-09-22 16:01:03

+0

您是否考慮過使用$ broadcast和$ on? [鏈接](https://docs.angularjs.org/api/ng/type/$rootScope.Scope) – 2014-09-22 19:07:22

回答

0

您可以使用事件。

Scope Documentation

在此次檢查出$on$broadcast$emit

在一般使用情況下,angular.element(catapp).scope()的使用被設計爲在角度控制器之外使用,就像在jquery事件中一樣。

理想的情況下您的使用情況,你會寫在控制器1作爲一個事件:

$scope.$on("myEvent", function (event, args) { 
    $scope.rest_id = args.username; 
    $scope.getMainCategories(); 
}); 

而在第二個控制器,你只是做

$scope.initRestId = function(){ 
    $scope.$broadcast("myEvent", {username: $scope.user.username }); 
}; 

編輯:意識到這是之間的通信兩個模塊

你可以嘗試包括firstApp模塊作爲依賴到secondApp你宣佈angular.module。這樣你可以與其他應用程序通信。

相關問題