【发布时间】:2017-02-18 00:41:27
【问题描述】:
我正在使用 Typescript 2.1(开发者版本)将 async/await 转换为 ES5。
我注意到,在我更改任何绑定到我的异步函数中查看的属性后,视图不会更新为当前值,所以每次我必须在结束时调用 $scope.$apply()功能。
示例异步代码:
async testAsync() {
await this.$timeout(2000);
this.text = "Changed";
//$scope.$apply(); <-- would like to omit this
}
之后,新的text 值不会显示在视图中。
是否有任何解决方法,这样我就不必每次都手动调用 $scope.$apply() 了?
【问题讨论】:
-
你不能“省略这个”。因为 async/await 使用原生 Promise 而不是 $q。 $apply 应该被调用,无论是在那里还是在调用者函数中。顺便说一句,在这里使用
$timeout是个糟糕的主意,它会导致额外的摘要,应该使用基于非 Angular 承诺的解决方案,例如Bluebird. -
我还没有读过,但我希望这能很好地帮助labs.magnet.me/nerds/2015/11/16/async-await-in-angularjs.html
-
在我看来,最好的解决方案是在 AngularJS 中使用此功能的非侵入性方式。我想我们应该更多地关注 typescript 如何转译这个 ES7 特性并找到触发摘要循环的方法。
标签: angularjs typescript angularjs-scope