Я хочу удалить модальное окно, которое было добавлено в стек навигации с предыдущей страницы. Например, я пользователь nav.push переходит на страницу, а затем с этой страницы пользователь открывает модальное окно. У меня есть Observable.timer внутри страницы, и он запускает nav.push, когда обратный отсчет достигает 0, поэтому, когда это произойдет, я хочу закрыть все модальные окна, открытые при его срабатывании? Как закрыть модальное окно, открытое с определенной страницы?
this.navCtrl.push(EndPage).then(() => {
const indexModal = this.viewCtrl.index;
this.navCtrl.remove(indexModal + 1);
this.navCtrl.remove(indexModal );
});
Модальное закрытие после окончания Observable.timer
answerModal : any;
ngOnInit() {
this.countDown = Observable.timer(0, this.tick)
.take(this.counter)
.map(() => --this.counter).finally(() => this.endTimer());
//this.countDown.subscribe(() => { });
}
endTimer()
{
this.answerModal.dismiss();
}
// user clicks to create modal
newmodal() {
this.answerModal = this.modalCtrl.create(ModalanswersPage);
this.answerModal.present();
this.answerModal.onDidDismiss(data=>{
console.info("closed");
});
}
Я открываю модальное окно со страницы, довольно просто modal.present (). Я хочу закрыть это модальное окно со страницы, которая его назвала
modal.dismiss () ...
Это работает только в том случае, если вы вызываете изнутри модальной страницы, а не со страницы, которая называется модальной
на самом деле вы можете вызвать отклонение для модального объекта, который вы создаете на родительской странице
Я попробовал и выдает ошибку: .. 'UnsubscriptionError: не удается прочитать свойство отклонения неопределенного'. Я добавил модальный: любой; перед конфигурацией и вызовите this.modal.dismiss ()
вы можете добавить соответствующий код .. где вы создаете модальное окно, а где отклоняете его?
Обновление вопроса с кодом
поскольку вы добавляете таймер в ngOninit, возможно, что модальное отклонение вызывается перед созданием, имеет условие if в endTimer. this.answerModal && this.answerModal.dismiss();
Спасибо, я изменил ngOninit на нормальную функцию, и проблема устранилась!


Я бы посоветовал поставить счетчик внутри модального окна. Модель должна отвечать за закрытие модального использования компонента ViewController. Таким образом, вы должны открыть модальное окно на своей главной странице, как вы это делаете сейчас.
// user clicks to create modal
newmodal() {
this.answerModal = this.modalCtrl.create(ModalanswersPage);
this.answerModal.present();
this.answerModal.onDidDismiss(data=>{
console.info("closed");
});
}
И тогда ваш модальный должен реализовать таймер и уволить.
YourModal.ts
constructor(public navCtrl: NavController, public viewCtrl: ViewController) {}
ngOnInit() {
this.countDown = Observable.timer(0, this.tick)
.take(this.counter)
.map(() => --this.counter).finally(() => this.endTimer());
//this.countDown.subscribe(() => { });
}
endTimer()
{
if (this.countDown)
this.countDown.unsubscribe();
this.viewCtrl.dismiss(false);
}
В приведенном выше коде видно, что я вызываю метод увольнения из компонента ViewController. Поскольку вы перемещаете таймер внутри модального окна, не забудьте отказаться от подписки на наблюдаемые объекты.
Надеюсь, поможет. Если вы сомневаетесь, дайте мне знать.
не совсем понятно, что вы пытаетесь сделать .. вы открываете модальное окно в другом месте, а затем продвигаете страницу?