2017-02-10 75 views
0

之后没有“在区域中”我看到类似于 Angular 2 Change Detection and Zone are Different in Cordova App的问题,但我无法找到根本原因。Angular 2在PhoneGap Build

背景:自7月份以来,我公司的移动应用已在iOS和Google Play商店中。它使用Angular 2,Webpack和PhoneGap构建。工作版本是使用Angular 2.0.0-beta.17构建的,现在我们有机会返回并将Angular升级到最新发布的版本。我们经历了重写其他两个内部应用程序的过程(仅限Web,未移植到移动设备),并且非常顺利。他们正在更新和工作。我们最后解决了移动应用程序,使用我们重写其他两个应用程序的经验,这似乎也一样。该应用程序在浏览器中本地运行完美,它也可以在本地使用PhoneGap完美运行,无论是通过CLI还是其桌面应用程序。在PhoneGap Build中构建应用程序时出现问题(没有构建错误)。

我所看到的是最简单的变化检测不能正常工作,看起来应该是“在区域中”的任务在区域外运行,因此不会触发变化检测。这里是最基本的例子:

当在应用程序的主页上,你可以选择“注册”或“登录”;任何一个只需导航到相应的页面。在任一页面中,我们使用的生命周期挂钩这样的:

ngAfterViewInit() { 
    this.isBusy = false; 
} 

this.isBusy只是在组件上一个布尔值,这是我们在模板中使用这样的:

<div class="busyMask" [ngClass]="{busyOff: !isBusy}"></div> 

我已经检查并且生命周期挂钩正常工作,并且this.isBusy被设置...但视图永远不会被更新。

我试过了很多不同的方法来实现它,包括删除所有Cordova插件,认为它必须是其中一个劫持/更改Angular的区域,但即使没有插件,结果也是一样的:无变化检测。

我很确定我无法提供一个显示问题的Plunker,因为它在任何地方都可以工作,但是在使用PhoneGap Build(Cordova)构建的应用程序上,所以我不确定除了回答问题外还可以做什么来自比我更聪明的人,他可能会帮助解决这个问题。

详细信息对于那些谁照顾:

角:2.4.7 PhoneGap的CLI:6.5.0

有人吗?

+0

有你'ngAfterViewInit'检查区?我怀疑angulars自己的回调在错误的区域执行,看起来像不同的bug。 – kemsky

+0

我将此添加到'ngAfterViewInit': 'console.log(( window).Zone.current);' 因为我没有对非ngZone区域进行正确的输入。 在浏览器控制台I看到这一点: '_name: “角度” _parent:区域 _name: “长栈跟踪”' 在PhoneGap的调试控制台,这样: '_name: “根” _parent:null' – rheomatic

+0

@kemsky:看到我上面的回复(我忘了标记你)。 – rheomatic

回答