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

淺談Angular 的變化檢測的方法

 更新時間:2018年03月01日 08:32:03   作者:阿踏  
這篇文章主要介紹了淺談Angular 的變化檢測的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Change Detection (變化檢測) 是 Angular 2 中最重要的一個特性。當(dāng)組件中的數(shù)據(jù)發(fā)生變化的時候,Angular 2 能檢測到數(shù)據(jù)變化并自動刷新視圖反映出相應(yīng)的變化。

在介紹變化檢測之前,我們要先介紹一下瀏覽器中渲染的概念,渲染是將模型映射到視圖的過程。模型的值可以是 JavaScript 中的原始數(shù)據(jù)類型、對象、數(shù)組或其他數(shù)據(jù)對象。然而視圖可以是頁面中的段落、表單、按鈕等其他元素,這些頁面元素內(nèi)部使用 DOM(Document Object Model) 來表示,為了更好地理解,我們來看一個具體的示例:

復(fù)制代碼 代碼如下:

<h4 id="greeting"></h4> <script> document.getElementById("greeting").innerHTML = "Hello World!"; </script>

這個例子很簡單,因為模型不會變化,所以頁面只會渲染一次。如果數(shù)據(jù)模型在運行時會不斷變化,那么整個過程將變得復(fù)雜。因此為了保證數(shù)據(jù)與視圖的同步,頁面將會進行多次渲染。接下來我們來考慮一下以下幾個問題:

1、什么時候模型會發(fā)生變化

2、模型產(chǎn)生了什么變化

3、變化后需要更新的視圖區(qū)域在哪里

4、怎么更新對應(yīng)視圖區(qū)域

而變化檢測的基本目的就是解決上述問題。在 Angular 2 中當(dāng)組件內(nèi)的模型發(fā)生變化的時候,組件內(nèi)的變化檢測器就會檢測到更新,然后通知視圖刷新。因此變化檢測器有兩個主要的任務(wù):

1、檢測模型的變化

2、通知視圖刷新

接下來我們來分析一下什么是變化,變化是怎么產(chǎn)生的。

變化和事件

變化是舊模型與新模型之間的區(qū)別,換句話說變化產(chǎn)生了一個新的模型。讓我們來看一下下面的代碼:

import { Component } from '@angular/core'; @Component({
 selector: 'exe-counter',
 template: `
 <p>當(dāng)前值:{{ counter }}</p>
 <button (click)="countUp()"> + </button>` }) export class CounterComponent {
 counter = 0;

 countUp() { this.counter++;
 }
}

頁面首次渲染完后,計數(shù)器的當(dāng)前值為0。當(dāng)我們點擊 + 按鈕時,計數(shù)器的 counter 值將會自動加1,之后頁面中當(dāng)前值也會被更新。在這個例子中,點擊事件引起了 counter 屬性值的變化。

我們繼續(xù)看下一個例子:

import { Component, OnInit } from '@angular/core'; @Component({
 selector: 'exe-counter',
 template: `
  <p>當(dāng)前值:{{ counter }}</p>
 ` }) export class CounterComponent implements OnInit {
 counter = 0;
 ngOnInit() {
  setInterval(() => { this.counter++;
  }, 1000);
 }
}

該組件通過 setInterval 定時器,實現(xiàn)每秒鐘 counter 值自動加1。在這種情況下,它是定時器事件引起了屬性值的變化。最后我們再來看個例子:

import { Component, OnInit } from '@angular/core'; import { Http } from '@angular/http'; @Component({
 selector: 'exe-counter',
 template: `
  <p>當(dāng)前值:{{ counter }}</p>
 ` }) export class CounterComponent implements OnInit {
 counter = 0; constructor(private http: Http) {}
 ngOnInit() { this.http.get('/counter-data.json')
    .map(res => res.json())
    .subscribe(data => { this.counter = data.value;
    });
 }
}

該組件在進行初始化的時候,會發(fā)送一個 HTTP 請求去獲取初始值。當(dāng)請求成功返回的時候,組件的 counter 屬性的值會被更新。在這種情況下,它是由 XHR 回調(diào)引起了屬性值的變化。

現(xiàn)在我們來總結(jié)一下,引起模型變化的三類事件源:

1、Events:click, mouseover, keyup ...

2、Timers:setInterval、setTimeout

3、XHRs:Ajax(GET、POST ...)

這些事件源有一個共同的特性,即它們都是異步操作。那我們可以這樣認為,所有的異步操作都有可能會引起模型的變化。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解angular2 控制視圖的封裝模式

    詳解angular2 控制視圖的封裝模式

    這篇文章主要介紹了詳解angular2 控制視圖的封裝模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Angular2中監(jiān)聽數(shù)據(jù)更新的方法

    Angular2中監(jiān)聽數(shù)據(jù)更新的方法

    今天小編就為大家分享一篇Angular2中監(jiān)聽數(shù)據(jù)更新的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解angular路由高亮之RouterLinkActive

    詳解angular路由高亮之RouterLinkActive

    這篇文章主要介紹了詳解angular路由高亮之RouterLinkActive,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 在Angular中實現(xiàn)懶加載的示例代碼

    在Angular中實現(xiàn)懶加載的示例代碼

    在Angular中,懶加載技術(shù)通過路由配置實現(xiàn)模塊的按需加載,可優(yōu)化應(yīng)用啟動時間和減少初始加載代碼量,首先創(chuàng)建獨立模塊,在模板中使用<router-outlet>插入懶加載組件,并可采用預(yù)加載策略如PreloadAllModules,以提前加載所有懶加載模塊,優(yōu)化加載性能
    2024-10-10
  • 淺談Angular4實現(xiàn)熱加載開發(fā)旅程

    淺談Angular4實現(xiàn)熱加載開發(fā)旅程

    本篇文章主要介紹了淺談Angular4實現(xiàn)熱加載開發(fā)旅程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法

    Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了Angularjs的ng-repeat中去除重復(fù)數(shù)據(jù)的方法,涉及AngularJS針對重復(fù)數(shù)據(jù)的遍歷與過濾技巧,需要的朋友可以參考下
    2016-08-08
  • AngularJS入門教程(零):引導(dǎo)程序

    AngularJS入門教程(零):引導(dǎo)程序

    這篇文章主要介紹了AngularJS入門教程(零):引導(dǎo)程序,本文是系列文章中的一篇,本系列文章用開發(fā)一個AngularJS應(yīng)用來講解,需要的朋友可以參考下
    2014-12-12
  • AngularJS操作鍵值對象類似java的hashmap(填坑小結(jié))

    AngularJS操作鍵值對象類似java的hashmap(填坑小結(jié))

    我們知道java的hashmap中使用最多的是put(...),get(...)以及remove()方法,那么在angularJS中如何創(chuàng)造(使用)這樣一個對象呢?今天小編通過本文給大家分享下,感興趣的朋友一起學(xué)習(xí)吧
    2016-11-11
  • AngularJS基礎(chǔ) ng-repeat 指令簡單示例

    AngularJS基礎(chǔ) ng-repeat 指令簡單示例

    本文主要講解AngularJS ng-repeat 指令,這里對ng-repeat的基礎(chǔ)資料做了整理,并附有示例代碼,有興趣的朋友可以參考下
    2016-08-08
  • Angular JS 生成動態(tài)二維碼的方法

    Angular JS 生成動態(tài)二維碼的方法

    這篇文章主要介紹了Angular JS 生成動態(tài)二維碼的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02

最新評論

鄂伦春自治旗| 襄垣县| 岳阳县| 怀宁县| 贵溪市| 高密市| 宿州市| 太康县| 高密市| 昌平区| 拜泉县| 综艺| 乌拉特中旗| 定日县| 双流县| 泸溪县| 灵丘县| 新郑市| 吴旗县| 阿图什市| 扶风县| 微博| 崇阳县| 清水河县| 广西| 锡林郭勒盟| 兴化市| 东宁县| 盘山县| 志丹县| 安岳县| 赣榆县| 房产| 阿勒泰市| 定安县| 柳江县| 临漳县| 明星| 达尔| 黄冈市| 射洪县|