Angular2 EXCEPTION:尝试检测脱水检测器的变化

时间:2016-03-12 00:07:22

标签: angular

我在阅读几个在线页面时遇到此错误@RouteConfig RouterLink。我不太清楚如何解决它或因为它。

https://github.com/angular/angular/blob/e7ad03cba6696fac4eed282ecccd5eb85a36ddb6/modules/angular2/src/core/change_detection/exceptions.ts#L87

当我使用constructor(http: Http, private ref: ChangeDetectorRef) { ..// setInterval(() => { this.ref.detectChanges(); }, 5000);

时放入一些组件时,错误就开始了

我的一个组件使用此构造函数

constructor(http: Http) {
                ..//
                /*
                   setInterval(() => {
                     this.ref.detectChanges();
                   }, 5000);
                */

如果我评论并更改构造函数,则此错误消失

ChangeDetectorRef

有人成为这个,或使用import numpy as np Beam_irradiance_DNI = np.array(Beam_irradiance_DNI) plt.hist(Beam_irradiance_DNI[Beam_irradiance_DNI>0], color="grey")

解决它的任何替代方案

2 个答案:

答案 0 :(得分:3)

阅读评论Eric Martinez。在我的案例中,我使用OnDestroydetach()解决了我已经完成的测试似乎很有效希望它可以帮助其他人。

    import {Component, ChangeDetectorRef, OnDestroy} from "angular2/core";
    ..//

    export class Test implements OnDestroy{
    ..//

    constructor(http: Http, public ref: ChangeDetectorRef){
    ..//

            setInterval(() => {
              this.ref.detectChanges();
            }, 5000);

    }

    ngOnDestroy(){
      this.ref.detach();
    }

注意:我是Angular2的新手,不知道这是否真的是最好的解决方案

答案 1 :(得分:0)

通过导入如下

在组件类中实现OnDestroy
import { Component, OnDestroy } from '@angular/core';

然后执行以下操作

ngAfterViewInit() { // *Bind when component loads
    console.log('onLoad');
    this.zone.reattach();
}

detectChanges(val: any){ // * Runs outside Angular Code
  /*Your codes and logic*/
  this.intrv = setInterval(()=>{
    this.zone.detectChanges();
  }, 1000)
}

ngOnDestroy() { // * Clean after leave. Clear any intervals or setTimeouts here.
   this.zone.detach();
   if(this.intrv){ //Making sure everything is removed
     clearInterval(this.intrv);
   }
}

阅读代码注释以进行解释。 以上代码使我免于错误。

<强>阐释:

  • 使用ngAfterViewInit()
  • 绑定初始化中的更改检测器 API
  • 听取角度以外的代码并将更改应用于模型
  • 当您离开视图时。使用ngOnDestroy()
  • 分离更改检测器

<强>文档