Angular 2直到我单击页面后才重新渲染吗?

Bac*_*tnz 1 javascript browser angular

在这个页面在这里

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

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

一切正常。但是,在我单击页面之前,不会重新渲染该按钮。

我还注意到,在涉及Angular中的数据绑定程序的大多数情况下都会发生这种情况。

  • 这是预期的行为吗?
  • 有没有办法解决?
  • 这是特定于Angular吗?

在Firefox和Chrome上测试

AJT*_*T82 5

似乎由于某种原因未按要求进行更改检测。您可以使用以下命令“强制”它,也可以使用NgZone以下命令手动触发更改检测ChangeDetectorRef

import { ChangeDetectorRef } from '@angular/core' 

constructor(private ref: ChangeDetectorRef) {}
Run Code Online (Sandbox Code Playgroud)

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

// whatever you are using to disable/enable button
this.myProperty = false;
this.ref.detectChanges();
Run Code Online (Sandbox Code Playgroud)

或使用NgZone

import { NgZone } from '@angular/core' 

constructor(private ngZone: NgZone) {}
Run Code Online (Sandbox Code Playgroud)

并在启用按钮的位置添加如下内容:

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

我无话可说。我已经注意到,尽管这些事情无缘无故地发生了,但这似乎是其中一种情况。如果有人对此有所了解,请告诉。尚未遇到任何能够解释这一点的人:)