2013-03-07 88 views
0

我們正在構建什麼將成爲一個大角度的應用程序。我們已經使用了大量的指令和服務,並有多達14個控制器。同步範圍在angularjs

我們的問題是在控制器之間共享數據。我們希望能夠在遙遠的控制器(不是兄弟姐妹)之間共享數據,並且不會破壞雙向綁定。

我建議使用專用於攜帶數據的服務。

var MyApp = angular.module('MyApp', []); 

MyApp.factory('dataContainer', function(){ return {} }); 
function FirstCtrl($scope, dataContainer) { 
    $scope.data = dataContainer; 

} 

function SecondCtrl($scope, dataContainer) { 
    $scope.data = dataContainer; 
} 

你可以在小提琴http://jsfiddle.net/didier_/R2Bgs/2/試試。

這是很好的做法嗎?

+0

請看看這個SO問題http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs – Chandermani 2013-03-07 13:18:40

回答

2

爲此使用服務絕對是一個好主意。您不必將這些對象視爲服務,這只是Angular項目中的默認命名。一旦你的應用程序增長了,你可能最終會得到不同類型的對象的工廠(在你的例子中,狀態對象,資源對象,助手對象等),名稱「服務」變得有點太模棱兩可。

我會謹慎對待像這樣傳遞的原始狀態對象。你應該在方法/ getter和setter中包裝它的訪問權限,以避免應用程序的不同部分在不應該的時候覆蓋其他狀態,這對於調試來說可能有點痛苦。

+0

感謝您的回答!但是我發現getters和setter有一個問題:雙向綁定將被打破。我也不喜歡傳遞未指定的數據結構,但我找不到更好的方法去做。 – user983716 2013-03-07 14:55:45

+0

@ user983716:「雙向綁定將被破壞」,爲什麼會被破壞?它仍然是同一個對象,您也可以在模板中綁定方法調用。如果你的意思是你不能在'ng-model'中使用它,那麼這可能是一件好事,因爲你可能想要在輸入之前過濾輸入,然後讓它修改全局應用程序狀態。 – 2013-03-07 15:19:03

+0

你100%正確。非常感謝! – user983716 2013-03-07 15:31:30