欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

變更檢測

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

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

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

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

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

渲染輸出

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

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

注意:綠色標(biāo)志會多次調(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();
 }
}

上述代碼會在Angular變更檢測周期發(fā)生錯誤。組件已經(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)的行為本身就不會導(dǎo)致數(shù)據(jù)的進(jìn)一步修改。但我們在 ngAfterView 生命周期發(fā)生修改數(shù)據(jù)行為,Angular 的“單向數(shù)據(jù)流”規(guī)則禁止在一個視圖已經(jīng)被組合好之后再更新視圖。
這意味著數(shù)據(jù)模型到視圖過程是單向,不可在視圖后發(fā)生數(shù)據(jù)流發(fā)生改變。

總結(jié)

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

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

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

相關(guān)文章

  • AngularJS框架的ng-app指令與自動加載實(shí)現(xiàn)方法分析

    AngularJS框架的ng-app指令與自動加載實(shí)現(xiàn)方法分析

    這篇文章主要介紹了AngularJS框架的ng-app指令與自動加載實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了ng-app指令的功能及自動加載機(jī)制的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • 基于AngularJS實(shí)現(xiàn)iOS8自帶的計(jì)算器

    基于AngularJS實(shí)現(xiàn)iOS8自帶的計(jì)算器

    這篇文章的主要內(nèi)容是使用angularjs實(shí)現(xiàn)一個計(jì)算器,是一個仿iOS8風(fēng)格的計(jì)算器,功能基本和iOS自帶的計(jì)算器是一致的。有需要的朋友們可以參考借鑒。
    2016-09-09
  • 詳解為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法

    詳解為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法

    所謂攔截器就是在目標(biāo)達(dá)到目的地之前對其進(jìn)行處理以便處理結(jié)果更加符合我們的預(yù)期。Angular的$http攔截器是通過$httpProvider.interceptors數(shù)組定義的一組攔截器,每個攔截器都是實(shí)現(xiàn)了某些特定方法的Factory。本文就介紹了為Angular.js內(nèi)置$http服務(wù)添加攔截器的方法。
    2016-12-12
  • Angularjs自定義指令Directive詳解

    Angularjs自定義指令Directive詳解

    Directive是一個非常棒的功能??梢詫?shí)現(xiàn)我們自義的的功能方法。下面通過實(shí)例代碼給大家介紹Angularjs自定義指令Directive相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • Angular中的NgZone.run()有什么用途

    Angular中的NgZone.run()有什么用途

    在Angular中,NgZone是一個服務(wù),用于管理異步任務(wù)的執(zhí)行,并提供一種在Angular區(qū)域內(nèi)或外部顯式運(yùn)行代碼的方式,NgZone.run方法是一種顯式在Angular區(qū)域內(nèi)運(yùn)行函數(shù)的方式,本文介紹Angular中的NgZone.run()有什么用,感興趣的朋友一起看看吧
    2024-01-01
  • AngularJS的ng-click傳參的方法

    AngularJS的ng-click傳參的方法

    本篇文章主要介紹了AngularJS的ng-click傳參的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解Angular Karma測試的持續(xù)集成實(shí)踐

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

    這篇文章主要介紹了詳解Angular Karma測試的持續(xù)集成實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    本篇文章主要介紹了詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • AngularJS使用ng-options指令實(shí)現(xiàn)下拉框

    AngularJS使用ng-options指令實(shí)現(xiàn)下拉框

    這篇文章主要介紹了AngularJS使用ng-options指令實(shí)現(xiàn)下拉框效果,ng-option指令使用也很簡單,下文具體給大家說明,對angularjs 下拉框知識感興趣的朋友一起看下吧
    2016-08-08
  • AngularJS API之copy深拷貝詳解及實(shí)例

    AngularJS API之copy深拷貝詳解及實(shí)例

    這篇文章主要介紹了AngularJS API之copy深拷貝詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論