当前位置: 代码迷 >> JavaScript >> 将多个IonicModals排在彼此之上
  详细解决方案

将多个IonicModals排在彼此之上

热度:66   发布时间:2023-06-05 10:18:44.0

这里解释了$ ionicModal服务的用法: ://ionicframework.com/docs/api/service/ $ ionicModal /

我遇到的情况是我打开了两个以上的模态。

例如:

  1. 我先打开一个loginModal
  2. 在那里,用户点击“openSignUp()”按钮,打开SignUpModal

但是,有些情况下,注册模式会在登录模式下面打开。 所以我必须先关闭登录才能看到它。

有没有办法要么 - 将新模态推到顶部 - 或者订购模态?

这是我解决这个问题的方法:

首先,为类名定义css样式

.top-modal {
    z-index: 11;
}

然后通过在初始化期间添加top-modal修改模态的类名

$ionicModal.fromTemplateUrl('myTopModal.html', {
    scope: $scope,
    animation: 'slide-in-left'
})
.then(function (modal) {
    modal.el.className = modal.el.className + " top-modal";
    $scope.myTopModal = modal;
});

打开模态时,它们将附加到DOM。 所以请记住你first打开哪个模态,然后first将它appended to DOM first

此外,所有模态都具有相同的css z-index:10

要理解这种重叠发生的原因。

  1. Modal1打开 - >获取附加到DOM <body> TAG。
  2. Modal2打开 - >在Modal1的<div>标记之后,将附加到DOM <body> TAG。
  3. Modal3打开 - >在Modal2的<div>标签之后,将附加到DOM <body> TAG。

错误条件 :如果您在Modal3上有一个按钮来打开Modal2 or Modal1

Modal1Modal2将在Modal3后面打开。

变通方法:您需要操纵每个模态的z-index ,以便无论打开它们的顺序,您单击的最后一个模态应该/将在先前打开的模态上打开。

我无法为您提供快速解决方案,因为它不是一个快速解决方案;但我通过阅读源代码并编辑它来解决它。

以下是我解决问题的方法:向Ionic回购 。 您可以轻松阅读其中所做的更改,以便进行修复。 它基本上都是对z-index操纵

另一种解决方案是每次分别打开和关闭模态时从DOM中追加和删除模态。 这样,模态将始终是打开时附加到DOM的最后一个。

这是我一直在使用的代码:

     // Open the login loginModal
    $scope.openLoginModal = function() {
        $ionicModal.fromTemplateUrl('templates/login.html', {
            scope: $scope
        }).then(function(loginModal) {
            $scope.loginModal = loginModal;

            // Show modal once it's finished loading
            $scope.loginModal.show();
        });
    };

    // Close login modal
    $scope.closeLogin = function() {
        $scope.loginModal.hide();

        // Remove login modal from the DOM
        $scope.loginModal.remove();
    };

您可以通过隐藏您不希望位于顶部的模态来解决,例如:

function showSignupModal() {
   if ($scope.loginModal.isShown())
      $scope.loginModal.hide();
   $scope.signUpModal.show();
}

但是,如果由于某种原因想要在后台打开loginModal,可以事先以这种方式打开和关闭loginModal:

function showSignupModal() {
   if (!$scope.loginModal.isShown())
      $scope.loginModal.show();
      $scope.loginModal.hide();
   }
   $scope.signUpModal.show();
 }
  相关解决方案