Comment gérer les "peut-être non gérée rejet: toile de fond, cliquez sur' une manière générale
J'ai angulaire de service pour le traitement des modaux:
angular.module('myApp').service('ModalService', function($uibModal) {
function open(options) {
return $uibModal.open(options);
}
});
Maintenant j'ai mis à jour angulaire de 1,6 et eu cette erreur:
Éventuellement non gérée rejet: toile de fond, cliquez sur
chaque fois que j'ouvre un de modal et de cliquer quelque part d'autre (le contexte) et le modal ferme (comme prévu). Je tiens donc à gérer cette unhandled exception
dans mon ModalService
que je ne veux pas gérer ce cas à chaque fois que j'utilise le ModalService
. C'est toujours ok pour fermer la modale par toile de fond, cliquez sur, ce n'est pas une exception.
J'ai essayé:
angular.module('myApp').service('ModalService', function($uibModal) {
function open(options) {
var modalInstance = $uibModal.open(options);
modalInstance.result.catch(function error(error) {
if(error === "backdrop click") {
//do nothing
} else {
throw error;
}
})
return modalInstance;
}
});
Mais cela conduit au problème que je ne peut pas traiter d'autres erreurs que backdrop click
comme ils sont toujours lancées:
ModalService.open({...}).result.catch(function(error) {
//this will catch the error too, but the throw in the ModalService
//will occure in parallel and will not be catched by this function
});
Et si j'essaie comme ceci:
angular.module('myApp').service('ModalService', function($uibModal) {
function open(options) {
var modalInstance = $uibModal.open(options);
modalInstance.result.then(function(whatever) {
return whatever;
}, function rejection(error) {
return error;
});
return modalInstance;
});
});
il résout le 'non gérée rejet" de l'erreur, mais pour tous les cas et pas seulement pour "toile de fond cliqué sur".
A tout le monde une bonne solution pour ce cas?
Vous devez vous connecter pour publier un commentaire.
Malheureusement c'est la façon dont ils gèrent dans L'officiel de Plucker Modale (interface utilisateur.bootstrap.modal).
Si vous cliquez sur n'importe quel bouton il enregistre quelque chose comme ceci:
Ce qu'ils font est:
Si vous supprimez l'erreur de rappel, de deviner ce que vous obtenez:
Et même sur annuler
Jusqu'à présent, vous pouvez soit le faire ou d'utiliser cette solution de contournement pour le silence non gérée rejets
then
.utiliser cette
maintenant, il ne vous donnera pas d'erreur
De l'INTERFACE utilisateur Spécifications dépendante.
Ce n'est PAS la meilleure solution si il y a des spécifications de l'INTERFACE utilisateur que l'utilisateur doit être en mesure de cliquer en DEHORS du modal pour fermer la modale.
Si ce n'est PAS le cas et il y a un petit " x " en haut à droite de l'modal et/ou il existe une étroite
toile de fond: false, //<<< !!!!!!! (voir le code ci-dessous)
empêchera l'utilisateur de cliquer en DEHORS de l'modal pour fermer la modale.
Cela permettra d'éviter l'erreur "peut-être non gérée rejet: toile de fond, cliquez sur" se produise.
Une fois de plus, vous avez besoin de regarder les spécifications de l'INTERFACE utilisateur et/ou obtenir la permission de les analystes de le mettre en œuvre.
Si vous utilisez un contrôleur au sein de votre modal. J'ai utilisé ce sur la clôture de la manifestation. Parce que la "Fermeture" est valide, mais "Rejetant" est un rejet. Cela va à l'intérieur de votre modal contrôleur, pas le parent.
De sorte que votre toile de fond, cliquez sur le feu, l'événement de clôture, mais fermé ne sera pas transmis de faux. Si c'est le cas, pour éviter que le comportement par défaut, et par programme fermer la modale au lieu de les rejeter. Bare à l'esprit, cela cassera l'utilisation de rejeter, si vous voulez l'utiliser pour sa fonction d'origine.