3 回答

TA貢獻1777條經驗 獲得超3個贊
怎么
$rootScope.$broadcast
辦?$rootScope.$broadcast
正在通過應用程序范圍發送事件。該應用程序的所有子級范圍都可以使用以下簡單方法來捕獲它:$scope.$on()
。當您想要到達不是直接父級的范圍(例如,父級的分支)時,發送事件特別有用
!!! 但是,要做的一件事是
$rootScope.$on
從控制器使用。$rootScope
是應用程序,當控制器被銷毀時,事件偵聽器將仍然存在,而當再次創建控制器時,它將堆積更多的事件偵聽器。(因此,一次廣播將被多次捕獲)。使用$scope.$on()
代替,聽眾也將被銷毀。$rootScope.$broadcast
&和有$rootScope.$broadcast.apply
什么區別?有時您必須使用
apply()
,尤其是在使用指令和其他JS庫時。但是,由于我不知道該代碼庫,因此我無法確定是否是這種情況。

TA貢獻1886條經驗 獲得超2個贊
$rootScope 基本上充當事件偵聽器和調度程序。
為了回答如何使用的問題,它與rootScope.$on; 結合使用。
$rootScope.$broadcast("hi");
$rootScope.$on("hi", function(){
//do something
});
但是,將它$rootScope用作您自己的應用程序的常規事件服務是一種不好的做法,因為您很快就會陷入每個應用程序都依賴$ rootScope的情況,并且您不知道哪些組件正在偵聽哪些事件。
最佳做法是為您要收聽或廣播的每個自定義事件創建服務。
.service("hiEventService",function($rootScope) {
this.broadcast = function() {$rootScope.$broadcast("hi")}
this.listen = function(callback) {$rootScope.$on("hi",callback)}
})

TA貢獻1877條經驗 獲得超1個贊
$ rootScope。$ broadcast是引發所有子范圍偵聽的“全局”事件的便捷方法。您只需使用$rootScope廣播消息,因為所有后代作用域都可以偵聽該消息。
根作用域廣播事件:
$rootScope.$broadcast("myEvent");
任何子級Scope都可以偵聽該事件:
$scope.$on("myEvent",function () {console.log('my event occurred');} );
為什么我們使用$ rootScope。$ broadcast?您可以$watch用來偵聽變量更改,并在變量狀態更改時執行功能。但是,在某些情況下,您只想引發一個事件,應用程序的其他部分可以偵聽該事件,而不管作用域變量狀態如何變化。這是$broadcast有幫助的。
- 3 回答
- 0 關注
- 1035 瀏覽
添加回答
舉報