我有一個表單數據,我需要在實際提交之前在不同控制器之間共享。在不同控制器之間共享數據的最佳角度方式
我正在使用module.value()將數據保存爲全局數據。
var serviceApp = angular.module('sampleservice', [ ]);
serviceApp.value('GData',{});
我想知道這是最好的解決方案嗎?
我有一個表單數據,我需要在實際提交之前在不同控制器之間共享。在不同控制器之間共享數據的最佳角度方式
我正在使用module.value()將數據保存爲全局數據。
var serviceApp = angular.module('sampleservice', [ ]);
serviceApp.value('GData',{});
我想知道這是最好的解決方案嗎?
您應該使用而不是爲此目的使用模塊。最好的選擇是使用service
,因爲它用於在控制器之間共享持久數據。
var ControllerOne = function (someService) {
}
var ControllerTwo = function (someService) {
}
app.service('someService', function(){
this.sayHello= function(text){
return "Service says \"Hello " + text + "\"";
};
});
或scope
var ControllerOne = function($scope) {
$scope.$on('someEvent', function(event, data) {
});
}
var ControllerTwo = function($scope) {
$scope.$on('someEvent', function(event, data) {
});
}
$rootScope.$broadcast('someEvent', [1,2,3]);
感謝您的答覆,我的疑問是爲什麼我們需要一個服務和變量/屬性,我們不能使用module.value(),我們可以直接注入到控制器? –
模塊不是爲此目的。服務是共享數據的標準。在這裏閱讀更多關於模塊http://docs.angularjs.org/guide/module。角度文檔清楚地表明瞭這一點。 –
Value()*是一種服務類型(http://docs.angularjs.org/api/AUTO.$provide)。 –
如圖所示,一種方法使用event
,如圖這篇文章:http://www.objectpartners.com/2013/08/21/using-services-and-messages-to-share-data-between-controllers-in-angularjs/ 是保持在服務中的數據,並讓每個控制器得到變更通知。
這意味着每個控制器可能都有自己的$範圍內的數據副本,以便他們的視圖可以訪問它。此外,您需要在服務中的$ rootScope和每個控制器上的$ on上調用$ broadcast,以確保數據保持同步。
我更喜歡的另一種方法是避免使用$ rootScope進行廣播,只需將數據保存在「應用」控制器中並讓視圖直接指向它,$ on就可以保持數據同步。該視圖仍然通過控制器的範圍獲取數據,但通過繼承。您不必$廣播或$開,因爲沒有什麼可以保持同步,並且服務是真正的無狀態。服務獲取數據的方式是將應用程序控制器作用域中的對象傳遞給它的方法。
我分叉從我提到的文章和修改來演示這種技術。我想你會發現生成的代碼更小,更易於理解。無論如何,這對我來說都是。我確實意識到這是一個偏好問題。
爲什麼不把父母控制器,兩個控制器和「玩」的範圍繼承? – Mik378
[可以一個控制器在AngularJS中調用另一個控制器的可能的副本](http://stackoverflow.com/questions/9293423/can-one-controller-call-another-in-angularjs) – Stewie