最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對(duì)Angular中單向數(shù)據(jù)流的深入理解

 更新時(shí)間:2018年03月31日 12:03:22   作者:laoergege  
這篇文章主要給大家介紹了關(guān)于對(duì)Angular中單向數(shù)據(jù)流的深入理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

變更檢測(cè)

Angular 中,數(shù)據(jù)是由頂部根節(jié)點(diǎn)流向最后的葉子節(jié)點(diǎn),整個(gè)數(shù)據(jù)流是單向,構(gòu)成一顆單向樹。

Angular 認(rèn)為所有的異步操作都有可能會(huì)引起模型的變化,引起數(shù)據(jù)模型發(fā)生變化的事件源有:

  • Events:click, mouseover, keyup ...
  • Timers:setInterval、setTimeout
  • XHRs:Ajax(GET、POST ...)

Angular 封裝 Zone來攔截跟蹤異步,一旦發(fā)現(xiàn)異步行為,Angular 就會(huì)進(jìn)行變更檢測(cè)。

因?yàn)閿?shù)據(jù)流是單向的,組件的數(shù)據(jù)來源只能由父組件進(jìn)行傳入,所以 Angular 會(huì)從上到下,廣度遍歷檢測(cè)組件,只要父組件檢測(cè)完畢就能繼續(xù)檢測(cè)子組件。而相比 angularjs,雙向、混亂的數(shù)據(jù)流方向,會(huì)導(dǎo)致重復(fù)變更檢測(cè)重復(fù)多次,直到數(shù)據(jù)穩(wěn)定,可能會(huì)導(dǎo)致性能問題,或者出現(xiàn)數(shù)據(jù)和視圖處于不一致的狀態(tài),即渲染過程完成后的視圖不能反映數(shù)據(jù)的實(shí)際狀態(tài)。

渲染輸出

當(dāng)檢測(cè)到數(shù)據(jù)模型變化時(shí),組件需要重新渲染,Angular將運(yùn)行它的 DOM 生成函數(shù),該函數(shù)會(huì)生成一個(gè)新的 DOM數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)對(duì)應(yīng)于組件 View 的新版本。

Angular 在渲染過程中,評(píng)估模板表達(dá)式并在整個(gè)組件樹中調(diào)用生命周期鉤子。

注意:綠色標(biāo)志會(huì)多次調(diào)用

從生命調(diào)用周期來看(綠色有向線),ngAfterViewChecked 標(biāo)示該組件及子組件視圖輸出完成??匆韵乱焕樱?br />

import {Component, AfterViewChecked} from '@angular/core';
import {Course} from "./course";
@Component({
 selector: 'app-root',
 template: `
 <div class="course">
  <span class="description">{{course.description}}</span>
 </div>
`})
export class AppComponent implements AfterViewChecked {
 course: Course = {
  id: 1,
  description: "Angular For Beginners"
 };

 ngAfterViewChecked() {
  this.course.description += Math.random();
 }
}

上述代碼會(huì)在Angular變更檢測(cè)周期發(fā)生錯(cuò)誤。組件已經(jīng)完成 DOM 數(shù)據(jù)結(jié)構(gòu)輸出,我們還在該組件 ngAfterViewChecked() 方法中修改了數(shù)據(jù)狀態(tài)。這樣導(dǎo)致了視圖渲染后,數(shù)據(jù)跟視圖狀態(tài)不一致。

數(shù)據(jù)從組件類流向表示它們的DOM數(shù)據(jù)結(jié)構(gòu),生成這些DOM數(shù)據(jù)結(jié)構(gòu)的行為本身就不會(huì)導(dǎo)致數(shù)據(jù)的進(jìn)一步修改。但我們?cè)?ngAfterView 生命周期發(fā)生修改數(shù)據(jù)行為,Angular 的“單向數(shù)據(jù)流”規(guī)則禁止在一個(gè)視圖已經(jīng)被組合好之后再更新視圖。
這意味著數(shù)據(jù)模型到視圖過程是單向,不可在視圖后發(fā)生數(shù)據(jù)流發(fā)生改變。

總結(jié)

從變更檢測(cè)過程以及渲染輸出過程中,可以總結(jié)出:

單向數(shù)據(jù)流指的是從組件樹的頂部到底部渲染掃描過程中應(yīng)用程序數(shù)據(jù)流轉(zhuǎn)到由渲染過程生成的輸出DOM數(shù)據(jù)結(jié)構(gòu)的流程。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 詳解Angular Karma測(cè)試的持續(xù)集成實(shí)踐

    詳解Angular Karma測(cè)試的持續(xù)集成實(shí)踐

    這篇文章主要介紹了詳解Angular Karma測(cè)試的持續(xù)集成實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • AngularJS 自定義過濾器詳解及實(shí)例代碼

    AngularJS 自定義過濾器詳解及實(shí)例代碼

    這篇文章主要介紹了AngularJS 自定義過濾器,這里整理了相關(guān)資料及示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • 讓angularjs支持瀏覽器自動(dòng)填表

    讓angularjs支持瀏覽器自動(dòng)填表

    簡單來說Angular.js是google開發(fā)者設(shè)計(jì)和開發(fā)的一套前端開發(fā)框架,幫助你簡化前端開發(fā)的負(fù)擔(dān)。當(dāng)然,這里有很多其它的前端開發(fā)框架,但是如何選擇合適的前端框架對(duì)于我們這些開發(fā)人員來說就不是那么容易了!
    2014-11-11
  • AngularJS深入探討scope,繼承結(jié)構(gòu),事件系統(tǒng)和生命周期

    AngularJS深入探討scope,繼承結(jié)構(gòu),事件系統(tǒng)和生命周期

    這篇文章主要介紹了AngularJS的scope,繼承結(jié)構(gòu),事件系統(tǒng)和生命周期,較為詳細(xì)的分析了scope的作用域、層次結(jié)構(gòu)、繼承及生命周期相關(guān)概念與使用技巧,需要的朋友可以參考下
    2016-11-11
  • Angularjs使用過濾器完成排序功能

    Angularjs使用過濾器完成排序功能

    這篇文章主要為大家詳細(xì)介紹了Angularjs使用過濾器完成排序功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 簡介AngularJS中使用factory和service的方法

    簡介AngularJS中使用factory和service的方法

    這篇文章主要簡單介紹了AngularJS中使用factory和service的方法,主要針對(duì)自定義工廠和服務(wù)的創(chuàng)建來講,需要的朋友可以參考下
    2015-06-06
  • 如何編寫一個(gè)完整的Angular4 FormText 組件

    如何編寫一個(gè)完整的Angular4 FormText 組件

    本篇文章主要介紹了如何編寫一個(gè)完整的Angular4 FormText 組件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • AngulaJS路由 ui-router 傳參實(shí)例

    AngulaJS路由 ui-router 傳參實(shí)例

    本篇文章主要介紹了AngulaJS路由 ui-router 傳參實(shí)例 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • angular源碼學(xué)習(xí)第一篇 setupModuleLoader方法

    angular源碼學(xué)習(xí)第一篇 setupModuleLoader方法

    這篇文章主要介紹了angular源碼學(xué)習(xí)第一篇,setupModuleLoader方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Angularjs的$http異步刪除數(shù)據(jù)詳解及實(shí)例

    Angularjs的$http異步刪除數(shù)據(jù)詳解及實(shí)例

    這篇文章主要介紹了Angularjs的$http異步刪除數(shù)據(jù)詳解及實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)思路及實(shí)現(xiàn)具體的方法,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

长治县| 云阳县| 越西县| 堆龙德庆县| 许昌市| 崇文区| 肇源县| 潍坊市| 五华县| 廉江市| 长宁区| 江阴市| 五大连池市| 正安县| 大冶市| 镇赉县| 康保县| 拉萨市| 巴楚县| 马山县| 辽阳县| 印江| 紫金县| 合肥市| 盘锦市| 察隅县| 苍溪县| 札达县| 肇源县| 邹平县| 广安市| 峨山| 乌兰浩特市| 区。| 崇义县| 工布江达县| 运城市| 大兴区| 客服| 旬邑县| 鄄城县|