Angular 2在我点击页面之前不会重新渲染?

时间:2017-02-01 21:33:17

标签: javascript angular browser

在此页面here

可以看到Facebook登录按钮最初被禁用。 (使用[disabled]="myProperty"

API请求/facebooklogin/isnewuser返回后,启用

一切正常。但是,在我点击页面之前,该按钮不会被重新呈现。

我也注意到,大多数涉及Angular数据绑定器的事情都会发生这种情况。

  • 这是预期的行为吗?
  • 到底有没有?
  • 这是否特定于Angular?

在Firefox&铬

1 个答案:

答案 0 :(得分:4)

似乎由于某种原因,变更检测不会发生。您可以使用 NgZone “强制”它,或使用 ChangeDetectorRef 手动触发更改检测:

import { ChangeDetectorRef } from '@angular/core' 

constructor(private ref: ChangeDetectorRef) {}

然后在设置变量后运行detectChanges()

// whatever you are using to disable/enable button
this.myProperty = false;
this.ref.detectChanges();

或使用NgZone

import { NgZone } from '@angular/core' 

constructor(private ngZone: NgZone) {}

并在启用按钮时添加以下内容:

// whatever you are using to disable/enable button
this.ngZone.run(() => {this.myProperty = false})

我不能再说出为什么会发生这种情况。我注意到,一旦这些事情发生在没有明显原因的情况下,这似乎就是其中之一。如果有人对此有所了解,请告诉我们。没有遇到任何能够解释这一点的人,但是:)