首頁 web前端 js教程 利用Angular如何實現變化檢測

利用Angular如何實現變化檢測

Jun 02, 2018 pm 02:50 PM
angular 變化 實現

這篇文章主要介紹了淺談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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

華為手機如何實現雙微信登入? 華為手機如何實現雙微信登入? Mar 24, 2024 am 11:27 AM

華為手機如何實現雙微信登入?隨著社群媒體的興起,微信已成為人們日常生活中不可或缺的溝通工具之一。然而,許多人可能會遇到一個問題:在同一部手機上同時登入多個微信帳號。對於華為手機用戶來說,實現雙微信登入並不困難,本文將介紹華為手機如何實現雙微信登入的方法。首先,華為手機自帶的EMUI系統提供了一個很方便的功能-應用程式雙開。透過應用程式雙開功能,用戶可以在手機上同

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

PHP程式設計指南:實作斐波那契數列的方法 PHP程式設計指南:實作斐波那契數列的方法 Mar 20, 2024 pm 04:54 PM

程式語言PHP是一種用於Web開發的強大工具,能夠支援多種不同的程式設計邏輯和演算法。其中,實作斐波那契數列是一個常見且經典的程式設計問題。在這篇文章中,將介紹如何使用PHP程式語言來實作斐波那契數列的方法,並附上具體的程式碼範例。斐波那契數列是一個數學上的序列,其定義如下:數列的第一個和第二個元素為1,從第三個元素開始,每個元素的值等於前兩個元素的和。數列的前幾元

如何在華為手機上實現微信分身功能 如何在華為手機上實現微信分身功能 Mar 24, 2024 pm 06:03 PM

如何在華為手機上實現微信分身功能隨著社群軟體的普及和人們對隱私安全的日益重視,微信分身功能逐漸成為人們關注的焦點。微信分身功能可以幫助使用者在同一台手機上同時登入多個微信帳號,方便管理和使用。在華為手機上實現微信分身功能並不困難,只需要按照以下步驟操作即可。第一步:確保手機系統版本和微信版本符合要求首先,確保你的華為手機系統版本已更新至最新版本,以及微信App

掌握Golang如何實現遊戲開發的可能性 掌握Golang如何實現遊戲開發的可能性 Mar 16, 2024 pm 12:57 PM

在現今的軟體開發領域中,Golang(Go語言)作為一種高效、簡潔、並發性強的程式語言,越來越受到開發者的青睞。其豐富的標準庫和高效的並發特性使它成為遊戲開發領域的一個備受關注的選擇。本文將探討如何利用Golang來實現遊戲開發,並透過具體的程式碼範例來展示其強大的可能性。 1.Golang在遊戲開發中的優勢作為靜態類型語言,Golang正在建構大型遊戲系統

如何在Golang中實現精確除法運算 如何在Golang中實現精確除法運算 Feb 20, 2024 pm 10:51 PM

在Golang中實現精確除法運算是一個常見的需求,特別是在涉及金融計算或其它需要高精度計算的場景中。 Golang的內建的除法運算子「/」是針對浮點數計算的,並且有時會出現精度遺失的問題。為了解決這個問題,我們可以藉助第三方函式庫或自訂函數來實現精確除法運算。一種常見的方法是使用math/big套件中的Rat類型,它提供了分數的表示形式,可以用來實現精確的除法運算

Angular元件及其顯示屬性:了解非block預設值 Angular元件及其顯示屬性:了解非block預設值 Mar 15, 2024 pm 04:51 PM

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。

PHP遊戲需求實作指南 PHP遊戲需求實作指南 Mar 11, 2024 am 08:45 AM

PHP遊戲需求實現指南隨著網路的普及和發展,網頁遊戲的市場也越來越火爆。許多開發者希望利用PHP語言來開發自己的網頁遊戲,而實現遊戲需求是其中一個關鍵步驟。本文將介紹如何利用PHP語言來實現常見的遊戲需求,並提供具體的程式碼範例。 1.創造遊戲角色在網頁遊戲中,遊戲角色是非常重要的元素。我們需要定義遊戲角色的屬性,例如姓名、等級、經驗值等,並提供方法來操作這些

See all articles