[英]How to exchange data between controllers without using a service in angular js
我有兩個控制器... C1
和C2
,我想驗證C1
的數據,但驗證邏輯在C2
,那么如何將數據從C1
傳遞到C2
並在C1
返回結果?
我知道角度上的服務,但是對於這種通信,我必須將所有數據(哪個太大)從C1
和C2
傳遞到似乎效率不高的服務。 有什么優化的方法嗎?
如果您不想使用公共服務,則有兩個選擇。
您可以使用$rootScope
保存共享數據。
通過選擇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控制器,並將其用作代理。
你可以做到
控制器2(不要忘記將$rootScope
作為對控制器的依賴項注入):
$rootScope.$broadcast("notifyC1",{/*mydata*/});
控制器1:
$scope.$on("notifyC1",function(evt,data){
console.log(data)
});
但是如果需要的話,您應該重新考慮應用程序設計。 將數據和驗證邏輯存儲在服務中,並將其注入到控制器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.