要解决Angular 7的变更检测不会在调用ChangeDetectorRef.DetectChanges时触发的问题,可以使用NgZone.run()方法来强制触发变更检测。以下是一个示例代码:
import { Component, ChangeDetectorRef, NgZone } from '@angular/core';
@Component({
selector: 'app-my-component',
template: `
{{ data }}
`,
})
export class MyComponent {
data: string;
constructor(private cdRef: ChangeDetectorRef, private zone: NgZone) {}
updateData() {
this.zone.run(() => {
// 在NgZone中运行代码以强制触发变更检测
this.data = 'New Data';
this.cdRef.detectChanges();
});
}
}
在上面的示例中,我们在组件的构造函数中注入了ChangeDetectorRef和NgZone。然后,在updateData()方法中,我们使用zone.run()方法来包装我们想要触发变更检测的代码。在NgZone中运行的代码将强制触发变更检测,以更新视图。
通过这种方式,我们可以确保在调用ChangeDetectorRef.DetectChanges时触发变更检测,即使在Angular 7中默认情况下它可能不会触发。