NgZone的簡單使用


  在Angular4中,如果模板中有一些變量在組件中經常變動,比如變量foo。

<div>
  我經常變動: {{ foo }}
</div>

  在組件中它的初始值為0。

  foo = 0;

  假設在組件中有個循環,不斷更新foo的值。

      for (let i = 0; i < 100; i++) {
        setInterval(() => this.counter++, 10);
      }

  那么頻繁的變動將造成性能損耗。

  Angular為我們提供了NgZone服務,對於一些頻繁的操作,可以不去觸發變更檢測。

一、使得Angular不跟蹤變化

  1、在組件中引入NgZone,再將其注入。

import { NgZone } from '@angular/core';
1   constructor(
2     private zone: NgZone
3   ) { }

  2、調用runOutsideAngular方法,Angular不會對里面的變化進行跟蹤。

    this.zone.runOutsideAngular(() => {
      for (let i = 0; i < 100; i++) {
        setInterval(() => this.counter++, 10);
      }
    });

setInterval每隔一秒更新foo,而此時模板中的foo將不會有變化。

二、重新跟蹤變化

  如果此時又想讓Angular跟蹤foo的變化,用其提供的run方法。

this.zone.run(() => {
  setTimeout(() => this.foo = this.foo, 1000);
});

那么1秒后模板中的foo會得到更新。         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM