簡體   English   中英

如何在不使用angular js中的服務的情況下在控制器之間交換數據

[英]How to exchange data between controllers without using a service in angular js

我有兩個控制器... C1C2 ,我想驗證C1的數據,但驗證邏輯在C2 ,那么如何將數據從C1傳遞到C2並在C1返回結果?

我知道角度上的服務,但是對於這種通信,我必須將所有數據(哪個太大)從C1C2傳遞到似乎效率不高的服務。 有什么優化的方法嗎?

如果您不想使用公共服務,則有兩個選擇。

  1. 您可以使用$rootScope保存共享數據。

  2. 通過選擇C1下的元素,可以從C2獲得對C1范圍的訪問。

可以說<div id="myC1Candidate">C1下。 您可以執行以下操作以從C2獲取C1的范圍

angular.element(document.getElementById("myC1Candidate")).scope()

注意

認為必須共享大量數據時使用服務效率低下是錯誤的。 將數據分配給服務單例時,該數據通過引用共享。

1-您必須使用服務。

2-如果您不想嵌套控制器繼承范圍:

<div ng-app="myApp">
  <div ng-controller="Ctrl1 as c1">
    <div ng-controller="Ctrl2 as c2">
      {{c1.name}}
    </div>
  </div>
</div>

3-在控制器代碼內部,您可以使用$ controller服務:

.controller('C2', function($scope, $controller) {
    $controller('C1', {$scope: $scope});
});

4-不要使用$ rootScope來存儲數據。

您可以在父控制器中注冊那些C1 / C2控制器,並將其用作代理。

參考 AngularJS從子控制器訪問父作用域

你可以做到

控制器2(不要忘記將$rootScope作為對控制器的依賴項注入):

$rootScope.$broadcast("notifyC1",{/*mydata*/});

控制器1:

$scope.$on("notifyC1",function(evt,data){
  console.log(data)
});

但是如果需要的話,您應該重新考慮應用程序設計。 將數據和驗證邏輯存儲在服務中,並將其注入到控制器中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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