標籤:表達 height 並且 簡介 指定 watch rip 檢測 size
1.簡介
angularjs啟動並產生視圖時,會根據ng-app元素和$RootScope進行綁定。$RootScope是所有$scope對象的最上層,是angularjs中最接近於全域範圍的對象。
$scope對象就是一個普通的javascript對象,在angularjs中充當資料模型,但與傳統的資料模型又不一樣,$scope並不負責處理和資料操作,它只是視圖和HTML之間的橋樑。
$scope的所有屬性都可以自動被視圖訪問到。
範圍是構成AngularJS應用的核心,它與應用的資料模型相關聯,同時也是運算式執行的上下文。範圍包含了渲染視圖所需的功能和資料,它是所有視圖的唯一源頭,可以將範圍理解成視圖模型。
$scope對象是定義應用商務邏輯、控制器方法和視圖屬性的地方。angularjs將$scope設計成和DOM類似的結構,因此$scope可以進行嵌套,也就是說我們可以引用父級$scope中引用父級$scope中的屬性和方法。
2.範圍功能
- 提供觀察者以監視資料模型的變化。
- 可以將資料模型的變化通知給整個應用,設定是系統外的組件。
- 可以進行嵌套,隔離業務功能和資料。
- 給運算式提供運算時所需的執行環境。
3.會建立子範圍的指令
AngularJS中大部分指令不會建立子範圍,但是以下指令例外,開發時必須注意範圍嵌套的相關問題,否則很容易出錯。
- ng-include
建立一個新的子範圍,並且會繼承父範圍。
- ng-switch
建立一個新的子範圍,並且會繼承父範圍。
- ng-repeat
為每一個item都建立一個子範圍,全部都會繼承父範圍。
- ng-controller
建立一個新的範圍,並且會繼承父範圍
4.$scope生命週期
$scope對象的生命週期處理有四個不同階段,分別是建立,連結,更新和銷毀。
建立
在建立控制器或指令時,AngularJS會用$injector建立一個新的範圍,並在這個建立的控制器或指令運行時將範圍傳遞進去。
連結
當Angular開始運行時,所有的$scope對象都會附加或者連結到視圖中。所有建立$scope對象的函數也會將自身附加到視圖中。這些範圍將會註冊當Angular應用上下文中發生變化時所需要啟動並執行函數。這些函數被稱為$watch函數,Angular通過這些函數獲知何時啟動時間迴圈。
更新
當事件迴圈運行時,它通常執行在$rootScope上。每個子範圍都執行自己的髒值檢測,每個監控函數都會檢查變化。如果檢測到任意變化,$scope對象就會觸發指定的回呼函數。
銷毀
當一個$scope在視圖中不再需要時,這個範圍將會清理和銷毀自己。(基本上不會需要你來清理範圍,但是你還是可以使用$scope上的$destroy()方法來清理範圍)。
AngularJS的範圍Scope