こんがりぃ

都内在住フリーランスのエンジニア。主にRuby on Rails。Twitter(@Kongari_Bug)で格ゲー。

ionic + Cordovaで連続でポップアップを開いたときに挙動がおかしくなるのを防ぐ

ionic + cordovaでionicPopupを使ってポップアップを実装したとき、1つ目のポップアップを閉じてすぐに2つ目のポップアップを開くとフォーカスがおかしくなる。

function a() {
  var popup = $ionicPopup.show({
      title: 'title',
      scope: $scope,
      buttons: [
        {
            text: 'OK',
        }
      ]
  });
}

function b() {
  var popup = $ionicPopup.show({
      title: 'title',
      scope: $scope,
      buttons: [
        {
            text: 'OK',
            onTap: function(e) {
                    popup.close();
                    a();
                }
            }
        }
      ]
  });
}

b();

問題はpopup.close()と次のポップアップのレースコンディションのよう。 次のようにtimeoutを十分にとればほぼうまくいく。

function a() {
  var popup = $ionicPopup.show({
      title: 'title',
      scope: $scope,
      buttons: [
        {
            text: 'OK',
        }
      ]
  });
}

function b() {
  var popup = $ionicPopup.show({
      title: 'title',
      scope: $scope,
      buttons: [
        {
            text: 'OK',
            onTap: function(e) {
                    popup.close();
                    $timeout(function () {
                        a();
                    }, 250);
                }
            }
        }
      ]
  });
}

b();