7
votes

Angularjs - détecter, caler et annuler les changements d'itinéraire

Je peux voir l'événement $ roulettes de roulettes, dans mon contrôleur, mais je ne vois pas comment dire anguleux de rester. J'ai besoin de popup quelque chose comme "Voulez-vous enregistrer, supprimer ou annuler?" et rester sur la "page" actuelle si l'utilisateur sélectionne Annuler. Je ne vois aucun événement qui permet aux auditeurs d'annuler un changement d'itinéraire.


0 commentaires

3 Réponses :


16
votes

Vous écoutez le mauvais événement, j'ai fait un peu de google mais je n'ai rien trouvé dans les docs. Un test rapide de ceci: xxx

dans un contrôleur global empêchait l'emplacement de changer.


3 commentaires

Comment continuer à changer? Par exemple - Afficher le message "Voulez-vous changer de page?" - Oui - Non. Sur Oui - Continuer, sur "Non".


Ce n'est pas bon si vous avez besoin d'accès aux paramètres de routage. Irritant vraiment que la route ne peut pas être annulée à partir de l'événement de début de la route.


Non. N'annule pas le changement d'emplacement de route du tout, Afaict. L'événement.preventDefault () semble ne rien faire.



2
votes

La manière documentée de le faire est d'utiliser la propriété résolution des itinéraires.

La documentation de service '$ Route' est indiquée qu'un événement '$ PitechRangeError' est tiré si l'une des promesses «résolves» est rejetée. 1 Cela signifie que vous pouvez utiliser" $ routeProvider "pour spécifier une fonction qui renvoie une promesse qui est ensuite rejetée si vous souhaitez prévenir la itinéraire de la modification.

Un avantage de cette méthode est que la promesse peut être résolue ou rejetée en fonction des résultats des tâches asynchrones.


3 commentaires

Mais même lorsque rejeté, l'URL du navigateur est modifiée. Comment gérer cela?


Vous pouvez modifier l'emplacement vous-même avec un service qui regarde la portée racine de $ emplacementchangnesccess. C'est ce que le service $ itinéraire utilise en interne, mais je ne sais pas s'il est totalement en sécurité de rester en vigueur de rester public à l'avenir. Cependant, vous pouvez le combiner avec $ PitechangeError pour maintenant restaurer l'ancien emplacement. Peut-être que ça vaut la peine de demander aux responsables.


@Felikz FYI, le problème angulaire pertinent à regarder est github.com/angular/angular.js / Problèmes / 2100



0
votes
if(condition){ //it doesn't matter what the condition is true or false
  $scope.$on("$locationChangeStart", function(event){ //this gets triggered
     event.preventDefault();  
  }); 
}

0 commentaires