最近用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,后就解決了這個問題。但是我還是不太清楚,為什么第一次就能正常顯示,可能是因為第二次打開彈層因為有緩存機制,所以創建速度更快的原因吧。