Удалить модальное окно со страницы в Ionic 2

Я хочу удалить модальное окно, которое было добавлено в стек навигации с предыдущей страницы. Например, я пользователь 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"); 
    });
  }

не совсем понятно, что вы пытаетесь сделать .. вы открываете модальное окно в другом месте, а затем продвигаете страницу?

Suraj Rao 02.04.2018 15:15

Я открываю модальное окно со страницы, довольно просто modal.present (). Я хочу закрыть это модальное окно со страницы, которая его назвала

condo1234 02.04.2018 15:16

modal.dismiss () ...

Suraj Rao 02.04.2018 15:17

Это работает только в том случае, если вы вызываете изнутри модальной страницы, а не со страницы, которая называется модальной

condo1234 02.04.2018 15:20

на самом деле вы можете вызвать отклонение для модального объекта, который вы создаете на родительской странице

Suraj Rao 02.04.2018 15:24

Я попробовал и выдает ошибку: .. 'UnsubscriptionError: не удается прочитать свойство отклонения неопределенного'. Я добавил модальный: любой; перед конфигурацией и вызовите this.modal.dismiss ()

condo1234 02.04.2018 15:26

вы можете добавить соответствующий код .. где вы создаете модальное окно, а где отклоняете его?

Suraj Rao 02.04.2018 15:28

Обновление вопроса с кодом

condo1234 02.04.2018 15:32

поскольку вы добавляете таймер в ngOninit, возможно, что модальное отклонение вызывается перед созданием, имеет условие if в endTimer. this.answerModal && this.answerModal.dismiss();

Suraj Rao 02.04.2018 15:33

Спасибо, я изменил ngOninit на нормальную функцию, и проблема устранилась!

condo1234 02.04.2018 15:42
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
10
75
1

Ответы 1

Я бы посоветовал поставить счетчик внутри модального окна. Модель должна отвечать за закрытие модального использования компонента 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. Поскольку вы перемещаете таймер внутри модального окна, не забудьте отказаться от подписки на наблюдаемые объекты.

Надеюсь, поможет. Если вы сомневаетесь, дайте мне знать.

Другие вопросы по теме