Angular SetTimeout不更新视图
我的组件有一段代码,例如:Angular SetTimeout不更新视图,angular,Angular,我的组件有一段代码,例如: this.test= false; setTimeout(() => { this.test= true; }, 1000); 我的视图有{test}问题是视图永远不会变为true,而是保持为false。我读到这可能是一个与polyfills有关的问题?但它是为另一个项目工作的,我没有为此添加多边形填充 更新 已修复,这是因为即使值为,也没有更新视图。我相信changedetectref也有类似的功能,但我决定将布尔值转换为可观察值,它成功了。您的代码
this.test= false;
setTimeout(() => {
this.test= true;
}, 1000);
我的视图有{test}问题是视图永远不会变为true,而是保持为false。我读到这可能是一个与polyfills有关的问题?但它是为另一个项目工作的,我没有为此添加多边形填充
更新
已修复,这是因为即使值为,也没有更新视图。我相信changedetectref也有类似的功能,但我决定将布尔值转换为可观察值,它成功了。您的代码看起来不错,但不确定您的浏览器是否支持箭头功能,请尝试以下操作:
setTimeout(function (){
this.test= true;
}, 1000);
试着这样做:
组件。ts
import { Observable } from 'rxjs/Rx';
export class sampleComponent {
private test: boolean = false;
constructor() {
Observable.interval(1000).subscribe((x) => {
this.test = true;
});
}
}
component.html
<div>{{test}}</div>
{{test}
您的问题很可能出现在代码的其他地方。如果封闭函数是function()而不是arrow函数,则示例代码有效。否则,您将更新不同的
此。关于何时可以访问此
,存在一个混淆,我希望blow示例可以清楚地说明这一点。箭头函数没有此
,但是,箭头函数可以从附带的函数访问此
“严格使用”;
设o=function(){};
o、 方法=函数(){
让updateView=\=>{
document.getElementById('app').append(this.test+'\n');
this.test=“测试不起作用。(很可能是无限的)”;
}
this.test='初始值';
updateView();
设i=0;
设置超时(()=>{
this.test='函数()中的箭头函数有效';
updateView()
},++i*1000);
setTimeout(函数(){
this.test='function()中的unbuned function()不起作用';
updateView();
},++i*1000);
setTimeout(函数(){
this.test='Bouned function()inside function()works';
updateView()
}.bind(这个),+i*1000);
}
o、 方法()代码>
你能发布示例代码吗?这就是我组件中的全部内容。。。我的观点{{test}}您能提供更多关于示例代码的上下文吗?此代码位于哪个外部函数或事件处理程序中?如果问题与多边形填充有关,我假设它在某些浏览器中可以正常工作。您还可以在setTimeout
事件处理程序中添加console.log('setTimeout ticked')
,以查看它是否被触发。您的封闭函数是箭头函数(=>)还是函数()?我尝试了您需要的两种方法。绑定(此)函数。