2017-07-31 81 views
1

我試圖從用戶一個接一個地得到兩個確認。如果第一個被取消,則不需要第二個。但是,如果第一個問題得到了同意,那麼應該顯示並處理第二個問題。我使用的是一塊像這樣的代碼IONIC中的連續確認提醒

showConfirmation1() { 
    let confirm = this.alertCtrl.create({ 
    title: 'C1', 
    message: "M1", 
    buttons: [ 
     { 
     text: 'No', 
     }, 
     { 
     text: 'Yes', 
     handler: data => { 
      this.showConfirmation2(); 
     } 
     } 
    ] 
    }); 

showConfirmation2() { 
    let confirm = this.alertCtrl.create({ 
    title: 'C2', 
    message: "M2", 
    buttons: [ 
     { 
     text: 'No', 
     }, 
     { 
     text: 'Yes', 
     handler: data => { 
      this.doYourJob(); 
     } 
     } 
    ] 
    }); 

如果用戶取消第一位的,一切工作正常。如果用戶接受第一個,則第二個顯示正確。然而,第二個有點凍結。它的No按鈕和Yes按鈕都不起作用。當你點擊頁面的其他區域時,它甚至不會消失。

回答

1

UPDATE:
實測值,需要較少的代碼和更容易理解一個清潔的解決方案。
通過在按鈕handler中返回false,可以防止關閉警報。並且dismiss-函數返回一個Promise,在轉換完成時得到解決。因此,我們將調用該函數來打開第二個提醒。

showConfirmation1() { 
    let confirm = this.alertCtrl.create({ 
     title: 'C1', 
     message: "M1", 
     buttons: [ 
      { 
       text: 'No', 
      }, 
      { 
       text: 'Yes', 
       handler: data => { 
        confirm.dismiss() 
        .then(() => { 
         this.showConfirmation2(); 
        }); 

        return false; 
       } 
      } 
     ] 
    }); 

    confirm.present(); 
} 

原文:你的第一個警報

利用dismiss(data:any)功能。並傳遞一個值,表明它沒有被取消。在onDidDismiss功能檢查此值。如果它出現第二次警報。

showConfirmation1() { 
    let confirm = this.alertCtrl.create({ 
     title: 'C1', 
     message: "M1", 
     buttons: [ 
      { 
       text: 'No', 
      }, 
      { 
       text: 'Yes', 
       handler: data => { 
        confirm.dismiss({ showSecond: true }); 
        return false; 
       } 
      } 
     ] 
    }); 

    confirm.onDidDismiss(data => { 
     if(data && data.showSecond){ 
      this.showConfirmation2(); 
     } 
    } 

    confirm.present(); 
}