2017-09-13 13 views
5

मैं आयनिक 2 का उपयोग कर रहा हूं। मेरे पास एक दृश्य है कि उपयोगकर्ता को यह पुष्टि करने के लिए कहा जाना चाहिए कि वे नेविगेट करते समय छोड़ना चाहते हैं (उस समय एक वीडियो चल रहा है, और यह शायद एक आकस्मिक नेविगेशन है)।मैं कैसे आयोनिक में एक टैब परिवर्तन पर एक नव गार्ड उपयोग कर सकते हैं?

मैं जब उपयोगकर्ता, शीर्ष नेविगेशन, या वापस हार्डवेयर बटन (Android) में वापस बटन पर क्लिक निम्नलिखित कोड का उपयोग कर के लिए इस काम कर ठीक है:

// 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(); 
     } 
    }); 
    } 

दृश्य एक टैब में बैठता है। एक अलग टैब पर क्लिक करने से नहीं कॉल इस समारोह करता है, तो उपयोगकर्ता के लिए प्रेरित किया जाता है, और टैब सिर्फ स्विच करता है।

मुझे यह टैब एक टैब परिवर्तन पर भी दिखाया जा सकता है? यह दृश्य नहीं है एक रूट टैब पृष्ठ।

-

मैं ionViewWillLeave() उपयोग करने की कोशिश की है, जो एक टैब परिवर्तन पर कहा जाता है, लेकिन यह स्विच करने से उपयोगकर्ता को रोकने के लिए एक तरह से अनुमति नहीं है।

// 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

लगता है आप की तरह वादा लौटना ही होगा। बजाय 'FALSE' की'; अनिवार्य रूप से 'लौट confirm.present()। –

उत्तर

0

आप इस के लिए एक वादा की जरूरत नहीं है, तो आप सिर्फ अगर उपयोगकर्ता छोड़ करने में सक्षम है सही या गलत वापस जाने के लिए की जरूरत है: नीचे कोड शीघ्र दिखाते हैं, लेकिन टैब के बाद बदल गया है करता है पेज है, इसलिए यदि वह सतर्क में छोड़ने के लिए और इस बात की पुष्टि करने के लिए इस चाहता है आप अपने allowedToLeave सही पर सेट किया और अपने पृष्ठ पॉप, यह ionViewCanLeave फिर से फोन करता हूँ लेकिन इस बार वह अपने अगर बयान दर्ज नहीं की जाती है।

// 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; 
    } 

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे