当*ngIf指令绑定到函数时,Angular不会及时检测到函数返回的值的更改,导致视图不会更新。解决这个问题的方法是将函数的返回值显式地通知Angular进行变更检测。
可以使用ChangeDetectorRef的detectChanges方法来手动触发变更检测。例如,如果我们将*ngIf指令绑定到以下函数:
isVisible() {
return this.items.length > 0;
}
我们可以改变它,让它显式地通知Angular进行检测:
isVisible() {
const isVisible = this.items.length > 0;
if (isVisible) {
this.changeDetector.detectChanges();
}
return isVisible;
}
在这个例子中,我们在函数的末尾调用了changeDetector.detectChanges()方法来通知Angular进行变更检测。
这个方法也可以应用于其他需要检测变化的场合,比如像FormControl中的valueChanges事件等。