[TOC]
# 作用域事件的傳播
在Angular中,作用域間有非常清晰的層次結構關系,類似于DOM樹狀圖形,最頂層的就是rootscope作用域,其余的都是在它基礎之上進行分支和嵌套的。在這種關系下的作用域,它們之間的數據通信變得相對復雜,概括來說,有下列兩種方式可以實現作用域的通信。
* 服務(service)通過在作用域間創建一個單例的服務,由該服務來處理各個作用域間的數據通信
* 事件(event)除使用服務外,還可以通過作用域間的事件進行數據通信,而要使用事件,則必須調用Angular中提供的兩個方法$broadcasted和$emitted
## $broadcasted
方法$broadcasted的功能是將事件從父級作用域傳播至子級作用域,它的調用格式$broadcast(eventname, data)其中,參數eventname為定義的事件名稱,data為事件傳播過程中攜帶的數據信息。
~~~js
$scope.$broadcast('filterStateChangeBroadcast',msg);
~~~
## $emitted
方法$emitted的功能是將事件從子級作用域傳播至父級作用域,它的調用格式如下。 $emitted(eventname, data)各參數的功能與$broadcasted相同。
~~~js
$scope.$emit('filterStateChange', 'xxx');
~~~
## $on
此外,除這兩個傳播事件的方法外,還需要通過調用$on方法,在作用域中監控傳播來的事件并獲取相應的數據,它的調用格式如下。
~~~js
$scope.$on(eventname, function(event,data){ // 接收傳播事件的處理代碼 })
~~~
在上述調用格式中,eventname為需要監控的傳播事件名稱,event為事件傳播過程中自帶的特征,該特征包括下列幾個重要的屬性
* event.targetScope 返回發起傳播事件的作用域名稱
* event.currentScope 返回正在接收傳播事件的作用域名稱
* event.name 返回傳播時間的名稱
* event.stopPropagation() 防止事件冒泡
* event.preventDefault() 阻止代碼事件的發生
* event.defaultPrevented當執行了preventDefault方法時,defaultPrevented為true,否則為false
而在$on方法處理傳播事件的函數中,另外一個data參數,則為事件在傳播過程中攜帶的數據,通過該對象可以在各個監控的作用域中獲取傳播時的數據,實現數據通信的功能。雖然說通過作用域的事件可以實現數據通信的功能,但是它們的傳播范圍非常有限,只能是在父和子級的作用域間進行傳播,其他不具有這種關系的作用域將無法監控到傳播來的事件。
- Angular簡介
- angular1資料網站
- Angular初級部分
- 打破傳統的前端
- Angular基本組成部分
- Angular環境搭建
- Angular項目測試
- Angular基礎概念
- Angular模塊
- Angular控制器
- Angular指令
- Angular表達式
- Angular視圖
- Angular基礎實戰
- Angular模塊創建和使用
- Angular控制器和模型創建
- scope對象
- 控制器中調度window對象和document對象
- Angular表達式調度過濾器
- Angular中的ng模塊全局方法
- Angular模板應用
- 使用指令復制元素
- 使用指令隱藏顯示元素
- Angular指令ng-if
- ng-src和ng-href
- Angular處理樣式
- Angular作用域事件傳遞
- 表單中的元素
- Angular初學者常見的坑
- 再論雙向綁定
- Angular中級部分
- Angular路由機制
- ui-router管理狀態
- ui-router狀態嵌套和視圖嵌套
- ui-router多個命名的視圖
- ui-router路由控制
- 自定義指令
- 自定義過濾器
- Angular項目目錄結構
- Angular服務
- Angular高級部分
- Angular依賴注入
- README