ionc4 modal (ion-modal, Modal Controller) 組件, 只能顯示一次,解決方法


最近用ionic4開發,遇到使用ion-modal組件,之前用ionic3寫的代碼,按照官方文檔 做了相應修改:

import { Component, OnInit } from '@angular/core';
import { ModalController } from '@ionic/angular';
import { ModalPage } from '../modal/modal.page';

@Component({
  selector: 'app-exam-detail',
  templateUrl: './exam-detail.page.html',
  styleUrls: ['./exam-detail.page.scss'],
})
export class ExamDetailPage implements OnInit {

  constructor(
    public modalController: ModalController,
  ) {

  }
  
  ......

  async presentModal() {
    const modal = await this.modalController.create({
      component: ModalPage,
      cssClass: 'modalClass'
    });
    await modal.present();
  }

}

對於ModalPage,與ionic3的區別就是關閉的代碼,由ViewController改成了ModalController:

import { Component, OnInit } from '@angular/core';
import { ModalController } from '@ionic/angular';

@Component({
  selector: 'app-modal',
  templateUrl: './modal.page.html',
  styleUrls: ['./modal.page.scss'],
})
export class ModalPage implements OnInit {

  constructor(
    public modalController: ModalController,
  ) { }

  dismiss(){
    this.modalController.dismiss();
  }
}

這樣改完后,發現第一次執行 presentModal() 可以顯示模態窗口,但是關閉后,再次點擊就不顯示了。后來搜索了半天也沒發現相關資料,自己嘗試后發現,只要在create時加上animated: false屬性就可以解決。當然默認是有動畫效果的,加上animated: false后就沒有動畫 效果了。至於怎么做到不影響 動畫 效果還能解決再次點擊不顯示的問題我做到。

續:

這個問題本質是tap的點透問題,也就是類似之前tap事件在移動設備上的延遲,對於上面的這個問題,當點擊按鈕時彈出了模態窗口,然后延遲時間到了,系統又在剛才點擊的位置觸發了一下點擊,於是剛剛顯示的窗口層又被關閉了(因為ionic的modal組件默認是點擊背影則關閉(backdropDismiss: true),於是改為backdropDismiss: false,后就解決了這個問題。但是我還是不太清楚,為什么第一次就能正常顯示,可能是因為第二次打開彈層因為有緩存機制,所以創建速度更快的原因吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM