angular 事件監聽,內建事件
對於一款前端框架,提起事件,很容易讓人聯想到DOM事件,比如說滑鼠點選以及頁面滾動等。但是我們這裡說的angular中的事件和DOM事件並不是一個東西。
事件的釋出
我們可以通過$emit()以及$broadcast()來發布事件
$emit(name, args)
name釋出的事件名稱
args會作為物件傳遞到事件的監聽器中
$emit()釋出的事件,會從子作用域冒泡到父作用域,產生事件的作用域之上的所有作用域都會收到這個事件的通知。
$broadcast(name, args)
同$emit的引數一直,name作為事件的名字,args作為監聽器接受 的引數。使用該方法事件的傳播方向是從上至下,即從父作用域到子作用域。
事件的監聽
事件釋出了,我們要註冊監聽事件的服務,才會對事件進行響應
可以通過$on()方法來註冊事件監聽事件。
$scope.$on(name, listenerFn)
當以name為事件名的事件被促發之後,listenerFn事件就會被執行。
$on()返回一個反註冊函式,可以用其來取消監聽器。
事件物件
所有的事件監聽器第一個引數都代表了事件物件,該物件有以下屬性:
targetScope作用域物件,傳送事件的作用域
currentScope:當前處理事件的作用域
name:當前事件的事件的名稱
stopPropagation:取消$emit觸發的事件進一步的傳播
preventDefaul:把defaultPreevented標誌設定為true,告訴子作用域可以無需處理該事件。
defaultPreevented:布林值
angular內建事件
$includeContentLoaded($emit事件)
ngInclude內容重新載入的時候,從ngInclude指令觸發
$includeContentRequested($emit事件)
從呼叫ngInclude的作用域上傳送,每次ngInclude的內容被請求的時候,都會發布該事件
$viewContentLoaded($emit事件)
當ngView內容被重新載入時,從ngView作用域上釋出
$locationChangeStart($broadcast事件)
通過$location服務對瀏覽器的地址更新時會觸發$locationChangeStart事件
$locationChangeSuccess($broadcast事件)
當瀏覽器的地址成功變更時觸發
$routeChangeStart($broadcast事件)
在路由變更發生之前,該事件從$rootScope釋出