Преимущество использования ionic2 ionViewCanLeave Navigationguard для ответа на предупреждение о том, чтобы остаться или покинуть страницу

В настоящее время не вижу смысла использовать такую ​​навигационную охрану, потому что мы не знаем о целевой странице, на которую нужно перейти (информация об активной странице доступна из метода getActive() navController). Обычно мы используем оповещение, чтобы задать вопрос: "Вы действительно хотите покинуть эту страницу?" в ответ на выбор пункта меню, например, и при нажатии ОК, насколько я могу судить, мы не знаем, какую страницу "setRoot" использовать в качестве целевой страницы, потому что обработчик ionViewCanLeave не имеет параметров, таких как toPage/ringPage.

Кому-нибудь еще удалось это сделать или, скорее, узнать по навигационным объектам информацию о целевой странице ionic2?

Вот небольшой код для установки контекста:

ionViewCanLeave(): boolean { // no parameters on offer :-( 
    let result: boolean = false;
    let alert: Alert = this._alertCtrl.create({
      title: 'Are you sure you want to leave..?',
      message: 'Your changes will be lost if you do?',
      buttons: [
        {
          text: 'Cancel',
          role: 'cancel',
          handler: () => {
            let dismiss: boolean = true;
            return dismiss;
          }
        },
        {
          text: 'OK',
          handler: () => {
            let dismiss: boolean = false;
            let alertPop = alert.dismiss();
            alertPop
              .then(() => {
                let rootNav: NavController = this._appCtrl.getRootNav();
                this._navCtrl.pop();
                this._navCtrl.setRoot(DashboardPage); // Here we want to parameterize to target page - hardcoded for now
              });
            return dismiss;
          }
        }
      ]
    });
    if (this._applicationService.getOfferStatus() === OfferStatus.live) {
      alert.present();
    }
    return result;
  }

1 ответ

Решение

Не уверен на 100%, что понимаю вопрос... Однако, насколько я понимаю, вам нужно запретить переход пользователя на какую-либо страницу в зависимости от каких-либо условий. Например, в форме редактирования у меня есть ниже

  ionViewCanLeave() {
    // here we are checking if the dialog is being closed and there are unsaved changes
    if (!this.saved && this.form.dirty) {
      return new Promise((resolve: Function, reject: Function) => {
        this.dialogs.showConfirmDialog('You have unsaved changes. Do you want to close and discard your changes?', null, null, 'confirm-warning-dialog')
          .then((confirmed) => {
            if (confirmed) {
              resolve();
            } else {
              reject();
            }
          });
      });
    }
  }

При этом проверяется, что если форма не была сохранена и в нее были внесены какие-либо изменения, отображается диалоговое окно подтверждения. Если в этом диалоговом окне нажать кнопку "Отмена", это предотвращает навигацию, в противном случае - навигацию. ionViewCanLeave не перемещается сам по себе, но работает как обработчик, когда пользователь покидает страницу. надеюсь это поможет

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