javascript - While 循环中的 Angular 5 更新 View

标签 javascript angular typescript

我的应用程序中有一个进度条,它使用 while 循环进行更新。我可以在每个循环中成功更改更新进度值,但 View 仅在整个 while 循环完成后更新。有没有什么办法可以在 while 循环中添加一些东西,比如在每个循环上添加“ForceViewUpdate()”之类的东西?

在此处检查我的示例并打开控制台以查看正在更新的值: https://stackblitz.com/edit/angular-5zlja4?file=app%2Fapp.component.ts

最佳答案

您等待的方式会阻塞整个 jsvascript 线程。 Javascript 在单个线程上运行,如果您阻止该线程运行 while 循环,您将不会执行任何其他代码,包括 UI 更新。你应该使用 setTimeout 在一段时间后运行代码,或者,你可以使用 aync/awaitPromises 让你的代码更有顺序感:

export class AppComponent  {
    sStatus = "Inactive";
    iProgressMax = 100;
    iProgressValue = 0;

  async Run() {
    this.sStatus = "Running...";
    while (this.iProgressValue < this.iProgressMax) {
      await this.wait(1000);
      this.iProgressValue = this.iProgressValue + 20;
      console.log(this.iProgressValue);
    }
    this.sStatus = "Complete";
  }

  wait(ms: number)  {
    return new Promise((resolve)=> {
      setTimeout(resolve, ms);
    });
  }
}

关于javascript - While 循环中的 Angular 5 更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49899517/

相关文章:

javascript - 使用 JQuery datepicker 时,ng-model 不更新值

angular - Angular Material ErrorStateMatcher 可以检测父表单何时提交吗?

typescript - 如何从智能感知中删除片段?

typescript - 是否可以在 TypeScript 类型和通用键类型中混合使用特定类型的键?

javascript - REST API分页如何保证数据一致性

javascript - JavaScript中从边缘到中心的填充算法

javascript - 是否有js插件将矩阵参数转换为css3转换属性?

angular - RXJS - 多个连续的 http 请求

c# - 在 Angular 6 和 ASP.net 中启用 CORS

mysql - 需要第三个依赖项的包中的 npm 解析问题