亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

angular中作用域的生命周期

zombieda / 1148人閱讀

摘要:也就是說它的存在會把給貫穿起來,它是否處于生命周期之中,直接影響了之間是否能夠彼此互通。二主題生命周期既然談周期,那必定有開始,有過程,有結(jié)束。

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

一、## 弄清楚一個問題前我們必須知道它是個什么東西 ##

先仰視-----畢竟對于前端來講,首次聽到MVC時覺得好牛X,它是啥玩意不多說,但如果你認為$scope就是我們的數(shù)據(jù)模型的話,建議你好好的溫習下google大大對它的定義,必竟這個東西不同于扯淡,我們需要一個嚴謹?shù)膽B(tài)度。$scope只是MVC中C和V的橋梁,或者官方的說法叫做glue,我覺得這個單詞很傳神的表達了對$scope的定位。也就是說它的存在會把MVC給貫穿起來,它是否處于生命周期之中,直接影響了MVC之間是否能夠彼此互通。那么M呢,它在哪里?別這些文字弄暈,M大多數(shù)也存在于$scope上,但又不僅在這里,也可能你把它直接扔在了HTML里,或者存在于某個DOM元素的屬性上。

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

二、## 主題——生命周期 ##
既然談周期,那必定有開始,有過程,有結(jié)束。

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

注冊監(jiān)視——作用域一旦生成,指令就會在它身上注冊一個監(jiān)視,就是我們平時用到的$scope.$watch(),顧名思義監(jiān)視什么,肯定是去監(jiān)視數(shù)據(jù)有沒有變化啊,難道還監(jiān)視隔壁妹子洗澡不成。

模型突變——以上兩個過程完成之后,數(shù)據(jù)和視圖之間的鏈接成功建議,這個時候一旦數(shù)據(jù)模型發(fā)生了變化,就應(yīng)該做點什么了,當然做什么取決于你。這個時候比如用戶在文本框里輸入了數(shù)據(jù),或者ajax取回的新的數(shù)據(jù)要應(yīng)用在程序中,或者用戶點擊了東西需要我們更改一些數(shù)據(jù)。這里關(guān)鍵的東西是,假如數(shù)據(jù)在用戶端發(fā)生了變化,如何從瀏覽器的js環(huán)境進入到angular的環(huán)境中操作在angular模型上的數(shù)據(jù),這里偷個懶用下官網(wǎng)的圖,但是請記住$scope.$apply,它是從js進入到angular的通道,在應(yīng)該內(nèi)置指令時,你不會去調(diào)用這個方法是因為angular幫你做了,等于沒做。那么當你自己定義指令時,要更新數(shù)據(jù)時你唯一的選擇就是它。

觀察——有了變化,我們就要觀察這個變化影響的范圍到底有多大,那么在進入到angular環(huán)境后就會執(zhí)行那個頗受詬病的臟值檢查。既然作用域是原型繼承下來的,而且和DOM結(jié)構(gòu)平行,那顯然最先應(yīng)該檢查就是rooScope,然后傳播到所有的子作用域上,這個時候$watch,設(shè)置的一些函數(shù),表達式等就會被執(zhí)行,相應(yīng)的改變發(fā)生的話就應(yīng)用你設(shè)置好的函數(shù)等。

摧毀——當我們不在需要一個作用域,需要將它移除掉,原則就是誰創(chuàng)建誰銷毀,使用的方法就是$scope.$destroy(),這里如同apply一樣,這個方法一要被調(diào)用,至于誰調(diào)用,參照原則。如果不做呢?good question,不做也不會被槍斃,只是在進行digest循環(huán)時,它仍然會被加入其中,增加性能的開銷。執(zhí)行完這個方法后,它占用的內(nèi)存才能被釋放,進而被當成垃圾回收掉。

以上就是scope整個生命周期,請記住這幾個關(guān)鍵詞:link,regesit,mutation,apply,digest,destory。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/81615.html

相關(guān)文章

  • [Tips on Ember 2] How components works when out of

    摘要:因為組件的存在范圍被限制在以內(nèi),這就是這種機制目前存在的意義所在。組件都是可以傳遞參數(shù)或外部作用域的,利用此機制進行判斷來執(zhí)行可選行為,這是對用戶友好的舉措。 這一篇還是一個簡單的例子所引發(fā)的思考。 你看,如今的框架和庫,無論規(guī)模大小功能多少,它們在本質(zhì)上都朝著組件化的思路快速演進著。Angular 有 directives,Angular 2應(yīng)該也還是這個叫法;Ember 從 Vie...

    jk_v1 評論0 收藏0
  • JS變量生命周期:為什么 let 沒有被提升

    摘要:請注意,就變量生命周期而言,聲明階段與變量聲明是不同的概念。提升在生命周期中無效的原因如上所述,提升是變量在作用域頂部的耦合聲明和初始化階段。然而,生命周期分離聲明和初始化階段。解耦消除了的提升期限。 為了保證的可讀性,本文采用意譯而非直譯。 提升是將變量或函數(shù)定義移動到作用域頭部的過程,通常是 var 聲明的變量和函數(shù)聲明function fun() {...}。 當 ES6 引入l...

    hoohack 評論0 收藏0
  • JS變量生命周期:為什么 let 沒有被提升

    摘要:請注意,就變量生命周期而言,聲明階段與變量聲明是不同的概念。提升在生命周期中無效的原因如上所述,提升是變量在作用域頂部的耦合聲明和初始化階段。然而,生命周期分離聲明和初始化階段。解耦消除了的提升期限。 為了保證的可讀性,本文采用意譯而非直譯。 提升是將變量或函數(shù)定義移動到作用域頭部的過程,通常是 var 聲明的變量和函數(shù)聲明function fun() {...}。 當 ES6 引入l...

    Steven 評論0 收藏0
  • 【轉(zhuǎn)】angularJS的兄弟controller之間如何正確的通信

    摘要:每個的指向指向父級作用域。之間的通信本質(zhì)上是當前的所在的如何跟其他上的進行通信。傳遞事件有種方式觸發(fā)的事件要通知整個事件系統(tǒng)允許任意作用域處理這個事件就要向下傳播。作用域上使用進行事件監(jiān)聽。示例關(guān)于同級之間通信我的一個提問 原文鏈接:http://www.cnblogs.com/webbes... AngularJS中的controller是個函數(shù),用來向視圖的作用域($scope)添...

    forsigner 評論0 收藏0
  • 2018年前端開發(fā)回顧

    摘要:在整個年,看到發(fā)布版增加了許多功能,包括新的生命周期方法新的上下文指針事件延遲函數(shù)和。它在等待渲染異步響應(yīng)時數(shù)據(jù),是延遲函數(shù)背后用來管理組件的代碼分割的。發(fā)布自第版開始將近年后,于年發(fā)布。 前端發(fā)展發(fā)展迅速,非常的快。 本文將回顧2018年一些重要的前端新聞,事件和 JavaScript 趨勢。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(ht...

    crelaber 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<