[英]Passing data from one controller through another through $rootScope
我正在從棱角開始我的發展,但我並不了解。 我正在嘗試做的是,我正在嘗試將相當大量的數據從一個控制器傳遞到另一個控制器。 這就是我設法做到的方式。
angular.module("myApp").controller("controllerName", function($rootScope, $scope, *...other stuff...*)
{ /* code */ }
后來有一種特定的方法可以從外部訪問,我可以像這樣復制集合:
$rootScope.selectedItems = angular.copy($scope.selected.items);
(這是一個5k字符串數組)
然后將其捕獲到另一個控制器中。 其他開發人員表示,通過$ rootScope傳遞此消息是不安全的,但是在傳遞數據並將其復制到本地控制器之后,我使用它來擺脫rootScope中的集合
delete $rootScope.selectedItems;
這是一種安全的方法嗎? 它運行完美,對我來說似乎沒有危險
有很多服務可供您播放
這是$ broadcast服務的示例https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
通常,請勿使用$rootScope
傳遞數據。 通過使用它,您可以使模塊依賴於未指定的功能,而這些功能可能不是模塊的依賴項。 這是一個結構性問題,以后會產生問題。
而是使用服務:
angular.module("myApp").service("myAppService", function () {
this.selectedItems = [];
});
angular.module("myApp").controller("controllerName1", function(myAppService, $scope) {
$scope.selectedItems = myAppService.selectedItems;
});
angular.module("myApp").controller("controllerName2", function(myAppService, $scope) {
$scope.selectedItems = myAppService.selectedItems;
});
還建議您將所有邏輯都納入服務(以及適當的工廠/提供者)中。 除非可以證明必要的特殊情況,否則控制器僅應用於公開服務功能。 這使得服務中的邏輯更易於進行單元測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.