zoukankan      html  css  js  c++  java
  • [Angular] Zones and NgZone

    NgZone, Angular uses it to profiling all the async actions such as setTimeout, http request and animation.

    For example if you dealing with heavy oprations for hundreds of times, you might want it run outside Angular Zone, so it won't trgger change detection hundreds of times.

    import { Component, OnInit, DoCheck, NgZone } from '@angular/core';
    
    @Component({
      selector: 'app-root',
      template: `
        <div>
          Counter: {{ counter }}
        </div>
      `
    })
    export class AppComponent implements OnInit, DoCheck {
      counter = 0;
      constructor(
        private zone: NgZone
      ) {}
      ngOnInit() {
        this.zone.runOutsideAngular(() => {
          for (let i = 0; i < 100; i++) {
            setTimeout(() => this.counter++);
          }
          this.zone.run(() => {
            setTimeout(() => this.counter = this.counter, 1000);
          });
        });
      }
      ngDoCheck() {
        console.log('Change detection has been run!');
      }
    }

    To notice that, the operation puts inside 'runOutsideAngular' should be async opreation. Otherwise there is no effect. Now you can think that Angular won't update our 'counter' if we run outside Angular. 

    So if we resume (trigger change detection) again, we can do:

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

      

  • 相关阅读:
    16. Vue 登录存储
    JS 10位、13位时间戳转日期
    14.Vue 定义全局函数
    13.Vue+Element UI实现复制内容
    12.Vue+Element UI 获取input的值
    11.Vue安装Axios及使用
    Layui入手
    MongoDB自启动设置
    sql数据统计
    sql查询总结
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6843681.html
Copyright © 2011-2022 走看看