模塊: 在 AngularJS 中,將函數代碼全部都定義在全局命名空間中絕對不是什麼好主意,全局變數污染會使衝突幾率變大,調試困難,降低開發效率。上次寫計時器的 controller 時,我們把 controller 寫在了一個全局命名空間中定義的函數里,這就是反例。在 Angular 中,模塊是定 ...
模塊:
在 AngularJS 中,將函數代碼全部都定義在全局命名空間中絕對不是什麼好主意,全局變數污染會使衝突幾率變大,調試困難,降低開發效率。上次寫計時器的 controller 時,我們把 controller 寫在了一個全局命名空間中定義的函數里,這就是反例。在 Angular 中,模塊是定義應用的主要方式。模塊包含了主要的應用代碼。一個應用可以包含多個模塊,每一個模塊內都包含了定義具體功能的代碼。
使用模塊的好處有很多:
- 保持全局命名空間的整潔;
- 便於測試;
- 可以復用;
- 使應用可以以任意順序載入代碼各個部分。
定義模塊方法:
angular.module('moduleName',[]);
參數:
1. name (字元串)
模塊的名稱
2. requires (字元串數組)
Angular 的依賴註入機制,數組元素為當前定義模塊所依賴的模塊名稱。
作用域:
作用域(scope)是構成 Angular 應用的核心基礎。應用的作用域是和應用的數據模型相關聯的,同時作用域也是表達式執行的上下文。$scope 是定義應用業務邏輯,控制器方法和視圖屬性的地方。
作用域是視圖和控制器之間的膠水。在應用渲染並呈現給用戶之前,視圖中的模板會和作用域進行連接,然後應用會對 DOM 進行設置以便將屬性變化通知給 AngularJS。這個功能讓 XHR請求等 promise 對象的實現變得非常容易。
$scope 是可以嵌套的,在子$scope中我們可以引用父$scope 的屬性,就像 JavaScript 一樣。這個分層就是,當我們為子級 DOM 元素創建了一個新的作用域時,其實也是為子元素創建了一個新的執行上下文。
作用域提供了監視數據模型變化的能力,我們可以使用 $apply 機制,將數據模型的變化在整個應用範圍內進行通知。
$rootScope 是 Angular 中最接近全局作用域的對象。所以不要在它上面附加太多業務邏輯,這跟污染全局作用域是一樣的。
$scope 就是一個JavaScript對象,我們可以為它添加或者刪除屬性,他的所有屬性都可以自動被視圖訪問到。它是視圖和控制器之間的膠水,也是視圖與 HTML 的橋梁。
生命周期:
創建:在創建控制器或者指令時,AngularJS 會同時用$injector 創建一個新的作用域,併在指令或者控制器運行時將該作用域傳遞進去。
鏈接:當 Angular 開始運行時,所有的$scope 對象都會附加或者鏈接到視圖中。所有創建$scope 對象的函數也會將自身附加到視圖中。
這些作用域將會註冊當Angular 應用上下文變化時需要運行的函數。
更新:事件迴圈運行在$rootScope上,在每個子作用域中進行臟值檢查,發現任意變化,即可執行相應的回調函數。
銷毀:當一個$scope 在視圖中不再被需要時,他將被銷毀。