2017-02-10 74 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

回答