Reputation: 602
I am using following line of code to open modal popup.
import { ModalController} from 'ionic-angular';
openModal()
{
const modal = this.modalCtrl.create(ModalPage);
modal.present();
}
Now, from local notification click event, it opens modal popup. Everytime I click notification it open modal, I want that if modal popup is already opened in application, it should not reopen it.
How can I prevent modal from reopening?
Any help on this is highly appreciated.
Upvotes: 1
Views: 2814
Reputation: 602
import {Modal} from "ionic-angular/components/modal/modal";
import {ModalOptions} from "ionic-angular/components/modal/modal-options";
import {ModalController} from "ionic-angular";
export class ModalHelper {
protected modal:Modal;
protected isModalIsOpen:boolean=false;
constructor(protected modalCtrl:ModalController) {
}
/**
* opens a modal
* @param component
* @param data
* @param {ModalOptions} opts
*/
openModal (component: any, data?: any, opts?: ModalOptions) {
if (this.isModalIsOpen === false) {
this.modal = this.modalCtrl.create(component, data, opts);
this.modal.present().then(()=>{
this.isModalIsOpen = true;
});
this.modal.onDidDismiss(()=>{
this.isModalIsOpen = false;
})
}
}
}
I used openModal helper to open a modal from provider by usinf following line of code:
Provider: my-provider.providers.ts
import { ModalController} from 'ionic-angular';
import {ModalHelper} from "../../../helper/modal.helper";
openModal()
{
this.modalHelper.openModal(ModalPage);
}
Upvotes: 1
Reputation: 1523
First attempt: (track modal open status with flag)
import { ModalController} from 'ionic-angular';
private modalOpen:boolean = false;
openModal()
{
if (!this.modalOpen){
this.modalOpen = true;
const modal = this.modalCtrl.create(ModalPage);
modal.present();
}
}
and on the dismiss function add this.modalOpen = false
Second attempt: (create Modal only once)
import { ModalController} from 'ionic-angular';
private modal;
constructor(){
this.modal = this.modalCtrl.create(ModalPage);
}
openModal()
{
this.modal.present();
}
Edit after comments Third attempt: (track openState in Provider/Store)
import { StateProvider } from 'yourStateProvider';
import { ModalController} from 'ionic-angular';
constructor(private state:StateProvider){}
openModal()
{
if (!this.stateProvider.modalOpen){
this.stateProvider.modalOpen = true;
const modal = this.modalCtrl.create(ModalPage);
modal.present();
}
}
ModalPage.ts
import { StateProvider } from 'yourStateProvider';
constructor(private state:StateProvider){}
dismiss(){
this.stateProvider.modalOpen = false;
}
StateProvider.ts
public modalOpen:boolean = false;
Upvotes: 1