2017-02-10 9 views
0

Angular 2 Change Detection and Zone are Different in Cordova Appのような問題が発生していますが、原因を特定できませんでした。PhoneGapビルド後の角2が "ゾーン内"でない

背景:私の会社のモバイルアプリは、7月からiOSとGoogle Playの両方の店舗にいます。 Angular 2、Webpack、PhoneGapを使用して構築されています。作業バージョンはAngular 2.0.0-beta.17を使用して作成されました.Angularを最新のリリースバージョンにアップグレードするチャンスがあります。私たちは2つの他の内部アプリケーション(Webのみ、モバイルに移植されていない)を書き直すプロセスを経て、かなりスムーズに進んだ。彼らは更新され、働いています。私たちは、他の2つのアプリを書き直した経験を使って、モバイルアプリを最後に取り組んだ。それはちょうど良いことだと思った。このアプリはブラウザでローカルに完璧に動作します。 CLIやデスクトップアプリケーションを使用して、PhoneGapをローカルで使用すると完全に正常に動作します。この問題は、PhoneGap Buildでビルドされたときに発生します(ビルドエラーはありません)。

私が見ているのは、最も簡単な変更検出が正しく機能していないことです。「ゾーン内」である必要があるタスクがゾーン外で実行されているため、変更検出をトリガしません。最も基本的な例を次に示します:

アプリのホームページにあるときに、「登録」または「サインイン」を選択できます。どちらか一方がそれぞれのページに移動するだけです。いずれかのページでは、我々はこのようにライフサイクルフックを使用している:私はしました

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

ngAfterViewInit() { 
    this.isBusy = false; 
} 

this.isBusyたちはテンプレートで次のように使う部品のちょうどブール値であり、チェックして、ライフサイクルフックが正常に動作していて、this.isBusyが設定されますが、ビューが更新されることはありません。

私は、すべてのCordovaプラグインを削除すること、アンジェラゾーンをハイジャック/変更することの1つでなければならないと考えていますが、プラグインなしでも結果は同じです:変化の検出なし。

PhoneGap Build(Cordova)でビルドされたアプリで問題を示すPlunkerを提供できないことは間違いないと思うので、他に何ができるのですか?これを理解するのを手伝ってくれるかもしれない、私より賢い人から。気にする人のため

詳細:

角度:2.4.7 PhoneGapのCLI:6.5.0

誰ですか?

+0

あなたはngAfterViewInit' 'ゾーンを確認しましたか?私は角度が自分のコールバックが間違ったゾーンで実行されていることを疑う、別のバグのように見えます。 – kemsky

+0

私はこれを 'ngAfterViewInit': ' console.log((ウィンドウ).Zone.current); ' に追加しました。なぜなら、非ngZoneゾーンのために適切な型付けをしていないからです。私はこの見ブラウザコンソールで : '_name: "角度" _parent:ゾーン _name: "長いスタックトレース"' PhoneGapのデバッグコンソールで、この: '_name: "ルート" _parent:null' – rheomatic

+0

@kemsky:上記の私の回答を見てください(私はあなたにタグを付けるのを忘れていました)。 – rheomatic

答えて

0

私は同じ問題を抱えていたし、このソリューションは、私の仕事:

http://weblogs.thinktecture.com/thomas/2017/02/cordova-vs-zonejs-or-why-is-angulars-document-event-listener-not-in-a-zone.html

+0

"ターゲットサイトに到達できない場合や、永久にオフラインになる場合に備えて、常に重要なリンクの最も関連性の高い部分を引用します。つまり、あなたはそのコードをどこに置いたのですか? – adamdport

関連する問題