簡體   English   中英

通過$ rootScope將數據從一個控制器傳遞到另一個控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM