天天看點

AngularJs $rootScope.Scope 作用域操作

這裡講的是一些scope的操作,如建立/登出/各種監聽及scope間的通信等等。

$rootScope.Scope

可以使用$injector通過$rootScope關鍵字檢索的一個根作用域。

可以通過$new()方法建立子作用域。(大多子作用域是在HTML模闆被執行編譯時自動生成)

格式:$rootScope.Scope([Providers],[instanceCache])

[Providers]:目前作用域需要被提供的服務工廠地圖。預設是ng。

[instanceCache]:為需要providers追加/重寫的服務提供預執行個體化服務。

方法:

$new(isolate);

建立一個新的子作用域。

父作用域将會廣播$digest()和$digest()事件。作用域可以使用使用$destroy()從作用域的層級結構中移除。

$destroy()使其所需的範圍和它的子作用域範圍内永久地從父作用域分離進而停止參與模型變化檢測和偵聽通知調用。

isolate:boolean類型。如果值是true,那麼這個scope不會從父scope繼承原型。作用域是獨立的,在這裡不能看見父scope的屬性。

當寫小窗戶元件的時候,這将是很實用的去防止不小心讀取到其父級的狀态。

$watch(watchExpression,[listener],[objectEquality]);

注冊一個監聽器的回調函數,該函數在watchExpression變化的時候被執行。

watchExpressions表達式每次執行都會産生一次$digest(),并且傳回一個将會被監聽的值。($digest()發現watchExpressions發生變化而執行多次,并且每次都是幂等的)

監聽隻有在目前的watchExpressions與之前的值不想等是被調用。變動是根據angular.equals函數判斷的。需要儲存對象比較後的值,也需要用到angular.copy。這也意味着看複雜的選項将不利于記憶和性能影響。

監聽可能會改變模型,這可能會引發其他監聽的變化。Ng會一直執行直到監聽的值穩點。重播疊代極限是10,為了防止陷入無限循環的死鎖。

watchExpressions:string或者function類型。每個$digest循環周期的表達式,傳回值的變化會觸發調用監聽。

listener: watchexpression的傳回值改變時發生回調。

objectEquality:使用angular.equals代替引用對象的相等性比較(對象的深度監聽)。

$watchGroup(watchExpressions,listener);

針對watchexpressions數組變量的$watch()。集合裡的任何一個表達式變化都将引發監聽的執行。

watchExpressions數組裡的每一項都被标準的$watch()操作觀察,并且審查每一次的$digest()去觀察每一項是否變化。

當watchExpressions數組裡的任何一項發生變化即執行。

$watchCollection(obj,listener);

淺度的觀察對象屬性,并且在其變化時執行(對于數組,這意味着看數組項;對于對象,這意味着看屬性)。如果檢測到更改,則該偵聽器将被觸發。

$digest();

處理所有的目前作用域和它的子作用域的監聽。因為監聽可能改變模型,是以$digest()會一直執行知道模型穩定。這意味這他可能進入無限循環。如果疊代次數超過10,這個函數将抛出“Maximum iteration limit exceeded”錯誤。

$destroy();

從父域中删除目前的scope(及其所有的子scope)。删除意味着$digest()不再傳播到目前作用域及其子作用域。删除也意味着目前的作用域符合垃圾集合的條件。

$eval([expression],[locals]);

在目前作用域上執行表達式并傳回結果。表達式的任何異常将傳播(捕獲)。在求Angular表達式的值的時候有用。

$evalAsync([expression]);

在稍後的時間點上執行目前範圍的表達式(異步)。

$apply([exp]);

$apply() 用來在Angular架構外執行angular内部的表達式。(例如浏覽器的DOM事件,setTimeout,XHR或第三方庫)。

$on(name,listener);

監聽一個給定類型的事件。

name:監聽的事件名。

listener:當事件發生時調用的函數。

$emit(name,args);

向上級已注冊的作用域傳播指定的事件,直到根作用域。

name:發出的事件名稱。

args:一個或多個可選參數,将傳遞到事件偵聽器。

$broadcast(name,args);

向下級已注冊的作用域廣播指定的事件。

$new,$destroy,$watch使用代碼:

$on,$emit,$broadcast使用代碼:

簡單的說下對scope的了解,就跟樹結構一樣,從rootScope作為根節點開始擴散,有父子關系的,有兄弟關系的,而且帶有繼承,子scope繼承父scope上的屬性...

繼續閱讀