首頁  >  文章  >  web前端  >  利用Angular如何實現變化檢測

利用Angular如何實現變化檢測

亚连
亚连原創
2018-06-02 14:50:321586瀏覽

這篇文章主要介紹了淺談Angular 的變化檢測的方法,現在分享給大家,也給大家做個參考。

Change Detection (變化偵測) 是 Angular 2 中最重要的特性。當組件中的資料發生變化的時候,Angular 2 能偵測到資料變化並自動刷新視圖反映出相應的變化。

在介紹變化偵測之前,我們要先介紹瀏覽器中渲染的概念,渲染是將模型對應到視圖的過程。模型的值可以是 JavaScript 中的原始資料型別、物件、陣列或其他資料物件。然而視圖可以是頁面中的段落、表單、按鈕等其他元素,這些頁面元素內部使用DOM(Document Object Model) 來表示,為了更好地理解,我們來看一個具體的範例:

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

這個例子很簡單,因為模型不會變化,所以頁面只會渲染一次。如果資料模型在運行時會不斷變化,那麼整個過程將會變得複雜。因此為了確保資料與視圖的同步,頁面將會進行多次渲染。接下來我們來考慮以下幾個問題:

1、什麼時候模型會改變

2、模型產生了什麼變化

#3、變更後需要更新的視圖區域在哪裡

4、怎麼更新對應視圖區域

而變化偵測的基本目的就是解決上述問題。在 Angular 2 中當元件內的模型發生變化的時候,元件內的變化偵測器就會偵測到更新,然後通知視圖刷新。因此變化檢測器有兩個主要的任務:

1、檢測模型的變化

2、通知視圖刷新

接下來我們來分析什麼是變化,變化是怎麼產生的。

變化和事件

變化是舊模型與新模型之間的區別,換句話說變化產生了一個新的模型。讓我們來看看下面的程式碼:

import { Component } from &#39;@angular/core&#39;; @Component({
 selector: &#39;exe-counter&#39;,
 template: `
 <p>当前值:{{ counter }}</p>
 <button (click)="countUp()"> + </button>` }) export class CounterComponent {
 counter = 0;

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

頁面首次渲染完後,計數器的目前值為0。當我們點選 按鈕時,計數器的 counter 值將會自動加1,之後頁面中目前值也會被更新。在這個範例中,點擊事件引起了 counter 屬性值的變化。

我們繼續看下一個例子:

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

該元件透過 setInterval 定時器,實現每秒鐘 counter 值自動加1。在這種情況下,它是定時器事件引起了屬性值的變化。最後我們再來看個範例:

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

該元件在進行初始化的時候,會傳送一個 HTTP 請求去取得初始值。當請求成功回傳的時候,元件的 counter 屬性的值會被更新。在這種情況下,它是由 XHR 回調引起了屬性值的變化。

現在我們來總結一下,引起模型變化的三類事件來源:

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

2、Timers:setInterval 、setTimeout

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

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

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

解決vue2.0動態綁定圖片src屬性值初始化時報錯的問題

create-react- app建置專案慢的解決方法

解決vue專案報錯webpackJsonp is not defined問題

以上是利用Angular如何實現變化檢測的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn