Comment affichez-vous une alerte J'ai essayé d'accrocher dans le ceci montre l'alerte, mais ne revient pas une fois qu'il est fermé. Si je le commente, le bouton arrière fonctionne bien. P> p> code> que l'utilisateur doit fermer avant de retourner à la page précédente? J'utilise la norme
NavController code> Evénement
ionviewwillleave code> comme ceci, mais cela ne fonctionne pas: p>
3 Réponses :
AS de Ionic2 RC, nous pouvons maintenant utiliser Guards de NAV . P> Dans certains cas, un développeur devrait pouvoir contrôler les vues de départ et
entrer. Pour ce faire, NavController a l'ionviewCanenter et
Méthodes IonViewCanleave. Semblable à des gardes d'itinéraire angulaires, mais sont
Plus intégré à NavController P>
blockQuote> Alors maintenant, nous pouvons faire quelque chose comme ceci: p> i préférez utiliser le Après quelques heures en difficulté avec cela, j'ai trouvé la solution. P> Un problème que je devais faire face est que le Une autre chose à garder à l'esprit est que qui étant dit, la solution que j'ai trouvée est la suivante: p> SO: p>
this.showalertmessage code> propriété, donc nous Peut avoir plus de contrôle lorsque nous devons afficher l'alerte si l'utilisateur essaie de quitter la page. Par exemple, nous pouvons avoir un formulaire dans la page, et si l'utilisateur n'a apporté aucune modification, nous ne voulons pas afficher l'alerte (
this.showalertMessage = false code>) et si le formulaire Était effectivement changé, nous voulons montrer l'avertissement (
this.showalertmessage = true code>) p>
ionviewwillleave code> est exécuté également lorsque l'alerte
est fermée code> est fermée de sorte que cela rend les choses plus compliquées (lorsque le < Code> View Code> est sur le point d'être fermé car vous avez appuyé sur le bouton arrière, l'alerte
code> apparaît, mais lorsque vous cliquez sur ok em>, qui tire à nouveau l'événement et Ouvre l'alerte
code> à nouveau et ainsi de suite ...). P>
actactesheets code> et
alertes code > obtenir ajouté à la pile de navigation code>, donc
this.nav.pop () code> au lieu de supprimer la vue actuelle de la pile, supprime l'alerte
code> (Et à cause de cela, nous pouvons sentir que cela ne fonctionne pas correctement). p>
ionviewwillleave < / Code> L'événement est tiré, je n'ai pas à montrer l'alerte
code>) li>
this.nav.remove () code> Pour supprimer l'alerte
code> de la pile, et une fois que c'est fait, nous faisons le
this.nav.pop () code> pour revenir à la page précédente. Li>
ul>
p>
Ne serait-il pas plus facile d'ajouter un bouton de retour personnalisé et de masquer l'un?
@ Boštjanpišler Mais si l'utilisateur n'utilise pas ce nouveau bouton, mais le bouton d'arrière physique Android?
aaah, touché :)
J'ai en fait des problèmes pour que cela fonctionne pour travailler dans RC3, la page navigue puis l'alerte apparaît. Des idées?
J'ai mis à jour la réponse, s'il vous plaît laissez-moi savoir si cela aide :)
oui vient de poster la même chose qu'une nouvelle réponse :)
La solution acceptée ne fonctionne pas dans RC3, voici une nouvelle en utilisant contrôleur NAV Guard NAV:
this.navCtrl.push(SomePage).catch(() => {});
Je viens d'essayer ceci (RC3, Dernières applications), mais tandis que "OK" fonctionne, "Annuler" "Annuler": . \ Node_modules \ @angular \ core \ src \ error_handler.js: 53 Erreur: non décaugée (en promesse ): faux code>
Vous avez raison, en cas d'utilisation de poussée ou similaire, une capture doit être utilisée, j'ai édité la réponse, merci.
Cela devrait être la réponse acceptée. @Cocowalla, la gestion des erreurs implicite sera ajoutée dans V 2.1.0 code>
Utilisation 2.1.0, modifiez le type de retour à une promesse <{}> ou d'obtenir une erreur de déséquilibre de type. Autre que cela fonctionne un régal, acclamations!
Merci, c'est une réponse acceptée. Cela a fonctionné pour moi.
Ceci est ma version de Bostjan forte> réponse, sans lancer une exception non gérée. ionViewCanLeave(): Promise<boolean> {
return new Promise(resolve => {
if (!this.formGroup.dirty) return resolve(true);
this._alertCtrl.create({
title: 'Confirm leaving',
message: 'There is unsave work, do you like to continue leaving?',
buttons: [{
text: 'Leave',
handler: () => {
resolve(true);
}
}, {
text: 'Stay',
handler: () => {
resolve(false);
}
}]
}).present();
});
}