Angular 為 $scope 提供了冒泡和隧道機制臀栈,$broadcast 會把事件廣播給所有子 Controller做盅,而 $emit則會將事件冒泡傳遞給父 Controller椭豫,$on 則是 Angular 的事件監(jiān)聽函數(shù),利用這三者,可以實現(xiàn)上下級和同級(需要構造一個共同的父級 Controller)之間的通信。
上下級之間
這種情況下比較簡單蝶桶。
如果是子 Controller 往父 Controller 上發(fā)送事件(從作用域往上發(fā)送事件),使用 scope.$emit
$scope.$emit("someEvent", {});
如果是父 Controller 往子 Controller 上發(fā)送事件(從作用域往下發(fā)送事件)掉冶,使用 scope.$broadcast
$scope.$broadcast("someEvent", {});
無論是 $emit 還是 $broadcast 發(fā)送的事件真竖,都用 $scope.$on 接收:
$scope.$on("someEvent", function(event, data) { // 這里取到發(fā)送過來的數(shù)據(jù) data });
同級之間
同級之間利用事件通信有兩種方法。一種是利用上下級之間事件傳播的變形厌小,另一種是借助 $rootScope 恢共。
借助父 controller
先看第一種,在子 Controller 中向父 Controller 觸發(fā)一個事件召锈,然后在父 Controller 中監(jiān)聽事件旁振,再廣播給子 Controller 获询,這樣通過事件攜帶的參數(shù)涨岁,實現(xiàn)了數(shù)據(jù)經(jīng)過父 Controller拐袜,在同級 Controller 之間傳播。
但是要注意梢薪,通過父 Controller 作為中介進行傳遞的話蹬铺,子 Controller 觸發(fā)的事件名和父 Controller 廣播用的事件名不能一樣,否則會進入死循環(huán)秉撇。
詳細請移步閱讀angular controller之間通信方式