【发布时间】:2016-08-09 15:49:05
【问题描述】:
我正在开发一个electron 应用程序,其客户端是用Angular2 编写的。
我遇到了很多人遇到的经典问题(例如here 和here),即我正在更新组件的数据,但视图没有更新,因为 Angular 没有不知道数据变了。人们建议的解决方案(见上文和here)是在整个组件树或部分组件树上手动运行更改检测(类似于Angular 1 的$rootScope.$digest 和$scope.$digest)。
但是,我想避免在 zone.run() 调用中包装我的所有数据更改,因为它稍微违背了使用 Angular 的目的。
我很确定我知道为什么会发生这种情况:我在 Angular 之外用电子代码(即main process)创建 Bluebird Promises,而这些不是区域感知的,所以他们不会通知变化的角度。
不过,我不知道如何解决它。我可以做些什么来在我的电子代码中创建区域感知承诺,以避免一直手动运行更改检测?我能否以某种方式将我的 Bluebird Promise 转换为 Zone 感知 Promise?
编辑:我想我错了,即使在 Angular 中创建 Bluebird 承诺也不支持区域。他们只是一般不了解区域。
编辑 2:我在之前的编辑中完全错了。 Bluebird 承诺在区域中工作得很好。但是,在电子应用程序的上下文中,在 main 电子进程中创建一个 Promise 并在 renderer 进程(Angular 所在的位置)中使用它是行不通的,因为返回的承诺不是区域感知的。从 Angular 代码创建 Promise 是有效的。
【问题讨论】:
-
主进程不就是在浏览器之外运行的进程吗?我认为那里的任何承诺都不会触发浏览器的变化。
-
我期待他们这样做,因为即使我在主进程中创建 Promise,我也会请求它们并在 Angular 端添加
.then()处理程序。
标签: javascript angular typescript electron bluebird