【发布时间】:2017-10-26 12:19:22
【问题描述】:
我正在尝试了解 Angular 中的更改检测和模板更新。我其实有点迷茫。
我有一个按钮和一个简单的输入字段。 单击按钮时,我将输入字段的值更改为“测试”。然后创建一个立即返回的异步函数。然后我使用 for 循环等待大约 4 秒(用于测试目的)。
- 我的期望是:输入字段的值立即变为“异步”,因为它是一个异步调用。
- 现实:输入字段的值在 4 秒后变为“异步”。
代码
updateField(){
this.textContentMain.title = "test"
this.asyncTestFunction();
for(var i=0;i<3999999999;i++){
}
}
asyncTestFunction() {
this._contentSalesTextConfigService.get(this.contentSalesTextConfig).subscribe(item => {
this.textContentMain.title = "asynced";
})
}
模板
<button (click)="updateField()">Update</button>
<input [ngModel]="textContentMain.title" #titleAccessor="ngModel" name="title" id="title" type="text" >
【问题讨论】:
-
我在这里可能是错的,但您的摘要周期可能在函数执行之前不会执行。你的同步函数与你的 for 循环是分开的,为什么你的 for 循环在那里我不确定。不过我的想法是 for 循环就是你在等待的。
-
只有在当前上下文中的所有内容都完成后,异步调用才会始终解决。 get 被添加到“待办事项列表”中,然后函数的其余部分在该列表被检查下一步之前运行。这与 Angular 的更改检测无关,它在实际设置标题值时按预期运行。
-
非常感谢@jonrsharpe
标签: angular asynchronous data-binding angular2-changedetection