2017-02-17 15 views
1

Невозможно увидеть, что в настоящее время использовать такую ​​навигационную панель, потому что мы не знаем о целевой странице для навигации (активна информация о странице доступна из метода navActive() navController). Обычно мы будем использовать оповещение, чтобы задать вопрос «Вы действительно хотите покинуть эту страницу?» в ответ на выбранную опцию меню, например, и на OK, насколько я могу судить, мы не знаем, на какой странице «setRoot» ссылается на целевую страницу, потому что обработчик ionViewCanLeave не имеет таких параметров, как toPage/enterPage.Преимущества использования ionic2 ionViewCanLeave Navigationguard для ответа на предупреждение, чтобы остаться или оставить страницу

Неужели кому-нибудь удалось это сделать, или, скорее, узнать из объектов навигации в информации о целевой странице 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; 
 
    }

ответ

6

Не 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 не перемещается самостоятельно, но работает как обработчик, когда пользователь покидает страницу. надеюсь, это поможет

+1

Хорошо с обещанием, может быть, мне повезло больше. Я переключу свой код на использование обещаний, как описано, и вернитесь к вам. Спасибо за подсказку :-) –

+1

Я получил это, используя обещания .. ваш пример был бы полезен в ионных документах :-) –

+0

Согласитесь, этот ответ принесет огромную пользу Ионным документам! Благодарю. – LeeGee