angular中作用域的生命週期

2021-09-17 02:17:58 字數 1619 閱讀 9462

先扯淡是慣例-------------生命對於人而言是再重要不過的東西了,但你不太可能每天去考慮自己離生命結束還有多久,生命週期就更談不上了,人的生命一旦結束就不會再次開始,如果你堅持認為生命有輪迴,好吧,咱倆的淡扯不到一塊去。但對於angular的作用域來講,它確實是有生命週期的,也就是說它可以死而復生,而且一定是在你需要它的時候它就生,不需要它的時候就讓它死,聽起來有些冷酷無情,但假如它在該死的時候沒死,該活的時候沒活,那結果可能就是----你被它玩死。生死這詞大殘酷了,我們還是文雅點,就叫它生命週期吧,開始正題。
一、## 弄清楚乙個問題前我們必須知道它是個什麼東西 ##

先仰視-----畢竟對於前端來講,首次聽到mvc時覺得好牛x,它是啥玩意不多說,但如果你認為$scope就是我們的資料模型的話,建議你好好的溫習下google大大對它的定義,必竟這個東西不同於扯淡,我們需要乙個嚴謹的態度。$scope只是mvc中c和v的橋梁,或者官方的說法叫做glue,我覺得這個單詞很傳神的表達了對$scope的定位。也就是說它的存在會把mvc給貫穿起來,它是否處於生命週期之中,直接影響了mvc之間是否能夠彼此互通。那麼m呢,它在**?別這些文字弄暈,m大多數也存在於$scope上,但又不僅在這裡,也可能你把它直接扔在了html裡,或者存在於某個dom元素的屬性上。

之所以仰視,是因為我們跪著,站起來吧-------很高大上麼,no,no,no,說的直白點,$scope就是乙個物件,和我們在js**裡看到的{}沒什麼不同,不要因為它和mvc廝混在一起就覺得它有多高大上,也不要覺得它名字叫作用域就覺得它好牛叉,它和js中的作用域完全是兩個概念。既然是物件,那它也原型,有也在自己的原型鏈中所處的位置,事實就是這麼一回事。

二、## 主題——生命週期 ##

既然談週期,那必定有開始,有過程,有結束。

建立——在angularjs 1版本中,指令才是大boss,可以說就是它在指點的江山,所在angular應該在啟動以後,第一步必須是先找到這些boss,boss能力有大小,有的可以建立scope,有的則不行,比如最常見到的ng-controller和ng-repeate都會建立自己的作用域,有些指令還會建立屬於自己的隔離作用域,應用了transclude屬性後還會建立隔離作用域的兄弟作用域,前面這句把angular中所有的4種作用域的型別都說了,想要弄清楚自己資料,或者等我哪天興致來了再寫吧。至於建立的過程被分成了2個階段,第一階段是compile,第二階段是link,那你猜scope是在哪個階段建立?如果真的是靠猜的,還是好好查查資料。compile的時候,angular會把指令對應的模板進行轉換,並且對於乙個指令的多個例項,angular只會編譯一次,很顯然這時候生成作用域是不合適的。這裡有乙個很重要的順序就是compile從上到下,而link是從下到上的,這樣的順序保證了在進行m和v的鏈結時,所有的編譯工作都已完成。

註冊監視——作用域一旦生成,指令就會在它身上註冊乙個監視,就是我們平時用到的$scope.$watch(),顧名思義監視什麼,肯定是去監視資料有沒有變化啊,難道還監視隔壁妹子洗澡不成。

觀察——有了變化,我們就要觀察這個變化影響的範圍到底有多大,那麼在進入到angular環境後就會執行那個頗受詬病的髒值檢查。既然作用域是原型繼承下來的,而且和dom結構平行,那顯然最先應該檢查就是rooscope,然後傳播到所有的子作用域上,這個時候$watch,設定的一些函式,表示式等就會被執行,相應的改變發生的話就應用你設定好的函式等。

Spring中Bean的作用域 狀態 生命週期

spring 3中為bean定義了5中作用域,分別為singleton 單例 prototype 原型 request session和global session,5種作用域說明如下 singleton 單例模式,spring ioc容器中只會存在乙個共享的bean例項,無論有多少個bean引用它...

mybatis的作用域(Scope)和生命週期

sqlsessionfactorybuilder 這個類可以被例項化 使用和丟棄,一旦建立了 sqlsessionfactory,就不再需要它了。因此 sqlsessionfactorybuilder 例項的最佳作用域是方法作用域 也就是區域性方法變數 你可以重用 sqlsessionfactory...

Angular 作用域與事件

從作用域往上傳送事件,使用scope.emit scope.emit someevent 從作用域往下傳送事件,使用scope.broadcast scope.broadcast someevent 這兩個方法的第二個引數是要隨事件帶出的資料。注意,這兩種方式傳播事件,事件的傳送方自己也會收到乙份。...