0

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に設定して、アプリを更新するだけです。

4

0 に答える 0