2017-09-13 33 views
5

Ionic 2 kullanıyorum. Kullanıcının, navigasyon sırasında ayrılmak istediklerini doğrulaması istenmesi gerektiğine dair bir görüşüm var (o sırada bir video oynatılıyor ve muhtemelen yanlışlıkla bir navigasyon).İyonik'te bir sekme değişikliğinde nav korumasını nasıl kullanabilirim?

Ben kullanıcı aşağıdaki kodu kullanarak, üst nav veya geri donanım düğmesine (Android) geri düğmesine tıkladığında bu çalışma cezası vardır:

// About to leave 
    ionViewCanLeave() { 
    this.api.getDefaultMedia().pause(); 

    return new Promise((resolve, reject) => { 
     if(!this.allowedToLeave) { 
     let confirm = this.alertCtrl.create({ 
      title: 'Are you sure?', 
      message: 'If you leave a class you will need to start over. Are you sure you want to leave? If you need a break you can pause by tapping the video.', 
      buttons: [{ 
      text: 'OK', 
      handler:() => { 
       this.allowedToLeave = true; 
       resolve(); 
      }, 
      }, { 
      text: 'Cancel', 
      handler:() => { 
       reject(); 
      } 
      }], 
     }); 
     confirm.present(); 
     } 
    }); 
    } 

görünümü bir sekmede oturur. farklı bir sekmeye tıklamak bu işlevi çağırmaz, bu nedenle kullanıcı istenmez ve sekme sadece değişir.

Sekme değişikliğinde bu komut istemi nasıl görüntülenebilir? Bu görünüm , bir kök sekmesi sayfası değildir.

-bir sekme değişikliği çağrısında, ancak geçiş yapmasını önlemek için bir yol izin vermez

Ben ionViewWillLeave() kullanarak denedi

.

// Called when user exits page via tab 
    ionViewWillLeave() { 
    this.api.getDefaultMedia().pause(); 

    if(!this.allowedToLeave) { 
     let confirm = this.alertCtrl.create({ 
     title: 'Are you sure?', 
     message: 'If you leave a class you will need to start over. Are you sure you want to leave? If you need a break you can pause by tapping the video.', 
     buttons: [{ 
      text: 'OK', 
      handler:() => { 
      this.allowedToLeave = true; 
      this.leave(); 
      }, 
     }, { 
      text: 'Cancel', 
      handler:() => { 
      // Do nothing 
      } 
     }], 
     }); 
     confirm.present(); 

     return false; 
    } 
    } 

    // Leave the view 
    leave() { 
    this.navCtrl.pop(); 
    } 
+0

Sözünü geri vermeniz gerektiği gibi görünüyor. Esasen, 'false' yerine return.present(); –

cevap

0

Kullanıcı bırakmak mümkün olup olmadığını sadece doğru veya yanlış dönmek gerekir, bunun için bir söz gerekmez: Aşağıdaki kodu istemini gösterir, ancak sekme sonra değişti yapar sayfa, yani eğer bu uyarıyı bırakmak ve onaylamak istiyorsa, allowedToLeave'unuzu doğru olarak ayarlayın ve sayfanızı açın, tekrar ionViewCanLeave'u arayacaksınız, ancak bu sefer if ifadenizi girmeyecektir.

// About to leave 
    ionViewCanLeave() { 
    this.api.getDefaultMedia().pause(); 

    if(!this.allowedToLeave) { 
     let confirm = this.alertCtrl.create({ 
     title: 'Are you sure?', 
     message: 'If you leave a class you will need to start over. Are you sure you want to leave? If you need a break you can pause by tapping the video.', 
     buttons: [{ 
      text: 'OK', 
      handler:() => { 
      this.allowedToLeave = true; 
      this.navCtrl.pop(); 
      }, 
     }, { 
      text: 'Cancel', 
      role: 'cancel' 
     }], 
     }); 
     confirm.present(); 
    }; 
    return true; 
    } 

Bu yardımcı olur umarım.

İlgili konular