Ionic 2:单击背景时模态不会关闭

Posted

技术标签:

【中文标题】Ionic 2:单击背景时模态不会关闭【英文标题】:Ionic 2: Modal doesn't close when clicking on backdrop 【发布时间】:2017-10-19 13:53:14 【问题描述】:

我正在尝试运行一个简单的示例应用程序,其模式仅覆盖屏幕的下部。当我单击我认为是预期行为的背景时,我希望模式关闭。但是,单击背景时没有任何反应。 我知道默认情况下应该为 true 的 enableBackdropDismiss。 我正在使用离子角度 3.2.1。

主页:

import  Component  from '@angular/core';
import  NavController, ModalController  from 'ionic-angular';
import  Modal  from '../modal/modal';

@Component(
  selector: 'page-home',
  templateUrl: 'home.html'
)
export class HomePage 

  constructor(public navCtrl: NavController, public modalCtrl: ModalController) 

  

  openModal()
    let modal = this.modalCtrl.create(Modal);
    modal.present();
  

<ion-header>
  <ion-navbar>
    <ion-title>
      Modal Test
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <button ion-button (click)="openModal()">Open Modal</button>
</ion-content>

模态:

import  Component  from '@angular/core';
import  IonicPage, NavController, NavParams, ViewController  from 'ionic-angular';

@IonicPage()
@Component(
  selector: 'page-modal',
  templateUrl: 'modal.html',
)
export class Modal 

  constructor(public navCtrl: NavController, public navParams: NavParams, public viewCtrl: ViewController) 
  

  closeModal(): void 
    this.viewCtrl.dismiss();
  

<ion-footer>
    <ion-navbar>
        <h4>Modal</h4>
        <p>I'm a Modal</p>
        <button ion-button (click)="closeModal()">Close Modal</button>
    </ion-navbar>
</ion-footer>

这是显示模态时的样子。模态框仅在单击按钮时关闭,而不是在单击背景时关闭:

【问题讨论】:

可以尝试修改模态模板为&lt;ion-content (click)="closeModal()"&gt;&lt;/ion-content&gt;&lt;ion-footer&gt;...&lt;/ion-footer&gt; 不是模态覆盖屏幕吗?你是怎么点击背景的? @sebaferreras:这是个好主意,但内容覆盖了背景,我想看看背景。 @suraj:正如您在图片中看到的那样,Modal 仅覆盖屏幕的下部。我希望它在单击其上方的区域时关闭。 当然,继续。对我来说这似乎是一个 hack,但它有效,所以我不在乎;) 【参考方案1】:

就像我们在 cmets 中想的那样,解决这个问题的一种方法是在 modal 中添加一个空的内容,将内容的点击事件绑定到 closeModal 方法,然后设置内容的背景透明

<ion-content tappable (click)="closeModal()">
</ion-content>
<ion-footer>
    <ion-navbar>
        <h4>Modal</h4>
        <p>I'm a Modal</p>
        <button ion-button (click)="closeModal()">Close Modal</button>
    </ion-navbar>
</ion-footer>

在组件样式中:

ion-content div.scroll-content 
    background-color: transparent;

【讨论】:

嗯,在我的设备上测试时,性能很差。需要一两秒钟才能听到点击事件,点击后需要一秒钟才能关闭。有什么想法为什么或要改进什么? 嗯...您是否尝试过将tappable 属性添加到ion-content html 元素?【参考方案2】:

只有css问题。

请添加到 app.scss

@media not all and (min-height: 600px) and (min-width: 768px) 
  ion-modal ion-backdrop 
    visibility: visible;
  

这个 sn-p 将显示您的背景(对于小屏幕它是隐藏的)

.modal-wrapper 
  width: 70%;
  height: 70%;
  position: absolute;
  margin-top: 25%;
  left: 15%;

设置你的模态不是全宽和全高(默认) 并且它应该绝对定位以避免ios设备上的问题,这将呈现模态框的背景。

顺便说一句,您现在不应该将您的内容放在里面 - 这不是一个很好的做法。但在这种情况下,您可以根据需要设置模态位置,并使用所有需要的元素和规则,而不受页眉或页脚限制。

【讨论】:

在我的例子中,我使用的是屏幕中心的模态并添加了可见性:可见;为我工作。谢谢【参考方案3】:

如果有人正在寻找 Ionic 5 的解决方案。 将此示例放在您的 global.scss 中

.my-custom-modal-css .modal-wrapper 
    height: 50%;
    width: 80%;
    position: absolute; 
 

.modal-shadow
    display: none;

别忘了添加“my-custom-modal”css 类。

const modal = await this.modalController.create(
  component: LocationqrviewPage,
  cssClass: 'my-custom-modal-css',
  backdropDismiss: true
);
return await modal.present();

【讨论】:

以上是关于Ionic 2:单击背景时模态不会关闭的主要内容,如果未能解决你的问题,请参考以下文章

在窗口外单击时自动关闭模态,但如果在模态窗口内单击则保持打开状态[重复]

当我们单击带有打印窗口的屏幕中的任意位置时,引导模式背景不会消失

markdown 单击模态外部时关闭

单击窗口外覆盖时如何关闭 Kendo UI 模态窗口?

模态关闭后,Bootstrap 4 模态背景仍然存在

离子按钮(单击)事件不适用于模态 - 离子3