ค้นหาเว็บไซต์

angular - Ionic 2: โมดอลไม่ปิดเมื่อคลิกบนพื้นหลัง


ฉันกำลังพยายามรันแอปตัวอย่างง่าย ๆ ที่มีโมดอลซึ่งครอบคลุมเฉพาะส่วนล่างของหน้าจอ ฉันต้องการให้โมดอลปิดเมื่อฉันคลิกที่พื้นหลัง ซึ่งฉันคิดว่าเป็นพฤติกรรมที่คาดหวัง อย่างไรก็ตาม ไม่เกิดอะไรขึ้นเมื่อคลิกที่พื้นหลัง ฉันรู้เกี่ยวกับ enableBackdropDismiss ซึ่งควรเป็นค่า true โดยค่าเริ่มต้น ฉันกำลังใช้ Ionic-angular 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>

นี่คือสิ่งที่ปรากฏเมื่อมีการแสดงม็อดัล ม็อดัลจะปิดเฉพาะเมื่อคลิกปุ่ม ไม่ใช่เมื่อคลิกที่พื้นหลัง:

คำตอบ #1

เหมือนที่เราได้สรุปไว้ในความคิดเห็น หนึ่งวิธีในการแก้ปัญหานี้คือการเพิ่มเนื้อหาเปล่าลงในโมดัล โดยผูกเหตุการณ์การคลิกของเนื้อหากับเมธอด 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;
}

คำตอบ #2

หากใครกำลังมองหาวิธีแก้ปัญหาสำหรับ Ionic 5 ให้วางตัวอย่างนี้ไว้ในไฟล์ global.scss ของคุณ

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

.modal-shadow{
    display: none;
}

อย่าลืมเพิ่มคลาส CSS "my-custom-modal"

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

บทความที่เกี่ยวข้อง