为什么* ngIf没有更新模板?无论isVisible在2秒后变为false,都会显示标题hello。
@Component({
selector: 'my-app',
template: `
<h1 *ngIf="isVisible == true">{{title}}</h1>
`
})
export class AppComponent {
title = 'Hello!';
isVisible = true;
constructor() {
setTimeout(function() {
this.isVisible = false;
console.log(this.isVisible);
}, 2000);
}
}
答案 0 :(得分:7)
使用像这样的匿名函数
setTimeout(function() {
this.isVisible = false;
}, 2000);
执行上下文(this
)指向全局对象(window
),但是您希望它是AppComponent
实例。在这种情况下,您最好使用保留词法范围的arrow function:
constructor() {
setTimeout(() => {
this.isVisible = false;
}, 2000);
}
您可以使用其他方法,例如使用Function.prototype.bind绑定上下文并保存上下文引用,但在这种情况下,箭头函数是最方便的。
答案 1 :(得分:0)
删除== true。
Ngif默认情况下将表达式与true进行比较。