angular-ui.github.io/angular-google-maps/ を使用しています
推奨される遅延読み込み手法を使用します。これは app.js にあります。
.config(function(uiGmapGoogleMapApiProvider) {
uiGmapGoogleMapApiProvider.configure({
// key: 'your api key',
v: '3.20' //defaults to latest 3.X anyhow
//libraries: 'weather,geometry,visualization'
});
})
そして、コントローラーのある時点で、これを実行します。
var uiGmapGoogleMapApiTimer = $timeout(function() {
reject("uiGmapGoogleMapApi didn't respond after 10 seconds.");
}, 5000);
console.log('DUDE.01');
uiGmapGoogleMapApi.then(function(maps) {
console.log('DUDE.02');
$timeout.cancel(uiGmapGoogleMapApiTimer);
geocoder = new google.maps.Geocoder();
resolve(geocoder);
}, function(err) {
console.log('DUDE.03');
});
そのため、オフラインになるとタイマーが作動し、ユーザーをログイン ページに戻します。(もともと私は単にアプリを終了します。Android では動作しますが、iOS では動作しません。実際には Apple によって禁止されています)。
だから...それが今私がログインページに送り返している理由です。
ここで、ログイン ページで、wifi を再アクティブ化します....地図を表示する (はずの) ページに戻ると.... 壊れます。uiGmapGoogleMapApi.then の成功ハンドラーは呼び出されません。(Dude.01 は印刷されますが、Dude.02 も Dude.03 も印刷されません)。
だから...そのページは(間違って)デバイスがまだ切断されていると考えています。
これは、Google マップの JavaScript の読み込みが 1 回しか行われないためだと思います (読み込み中 - そのため、アプリを閉じて元に戻すと、問題なく動作します)。
だから...それは本当に遅延読み込みではありません(?)。または...遅延読み込みの場合、次のようなシナリオをサポートしていないようです... 2回目の読み込みを試してください(接続のために最初の読み込みが失敗した場合)。
angular-ui.github.io/angular-google-maps/ のソースコードに精通していて、この問題の解決策を提案できる人はいますか?
ライブラリのコードに入力したログを調べたところ、結論に達しました。2 回目に uiGmapGoogleMapApi.then を呼び出したときに、183 行目を再実行する方法が必要です。現在はそうではありません。アプリを起動したときに最初に呼び出され、最初からインターネットに接続しているだけです。
そして、「プロバイダー」に関するこのドキュメントから理解したことに基づいて、2回目に使用しようとするときに(直前に)uiGmapGoogleMapApiを再インスタンス化する必要があります。
https://docs.angularjs.org/api/auto/service/ $provide
そうですか?どのように?
ここでプロバイダーのキャッシュと戦っているようです。コントローラーで依存性注入を使用して、uiGmapGoogleMapApi への参照を取得するためです。(私は .controller('myctrl', function(uiGmapGoogleMapApi) {...} を持っています)
私が必要とするかもしれないものは次のとおりです。
.controller('myctrl', function() {
var uiGmapGoogleMapApi = $injector.get('uiGmapGoogleMapApi');
//or something along that line maybe
})
試したばかりですが、まだうまくいきません。
助けてください。
ありがとう、ラカ
さて、私の「解決策」は次のとおりです。ログインページに移動する代わりに、ウィンドウオブジェクトの現在のURLをindex.htmlに設定して、アプリを更新するだけです。