129 votes

AngularJS $location ne pas modifier le chemin d’accès

Je vais avoir un problème avec la modification de l'URL de la page une fois qu'un formulaire a été soumis.

Voici le flux de mon application:

  1. Les itinéraires sont établis, l'URL est reconnu à une certaine forme de la page.
  2. Le chargement de la Page, contrôleur des ensembles de variables, les directives sont licenciés.
  3. Une forme spéciale de la directive est déclenché qui effectue une forme particulière de soumission à l'aide d'AJAX.
  4. Après l'AJAX est effectuée (Angulaire ne prend pas soin de l'AJAX), puis un rappel est tiré et que la directive exige que le $scope.onAfterSubmit fonction qui définit l'emplacement.

Le problème est que, après la définition de l'emplacement de la rien ne se passe. J'ai essayé la définition de l'emplacement param ' / ' ... Nope. J'ai aussi essayé de ne pas soumettre le formulaire. Rien ne fonctionne. Quelqu'un peut-il m'aider s'il vous plaît?

J'ai testé pour voir si le code atteint le onAfterSubmit fonction (ce qu'il fait).

Ma seule pensée est que d'une certaine façon le domaine de la fonction est changé (depuis sa appelé à partir de la directive), mais là encore, comment peut-il appeler onAfterSubmit si la portée a changé?

Voici mon code

var Ctrl = function($scope, $location, $http) {
  $http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
    $scope.resource = data;
  });

  $scope.onAfterSubmit = function() {
    $location.path('/').replace();
  };
}
Ctrl.$inject = ['$scope','$location','$http'];

303voto

Flek Points 3312

J'ai eu un problème similaire il y a quelques jours. Dans mon cas, le problème est que j'ai changé les choses avec une 3ème partie (bibliothèque jQuery pour être précis) et dans ce cas, même si l'appel de fonctions et réglage variable des œuvres Angulaire n'est pas toujours reconnaître qu'il y a des changements ainsi, jamais il ne digère.

$apply() est utilisée pour exécuter une expression dans angulaire de l'extérieur de l'angle du cadre. (Par exemple à partir du navigateur d'événements DOM, setTimeout, XHR ou d'un tiers des bibliothèques).

Essayez d'utiliser $scope.$appliquer() juste après que vous avez changé l'emplacement et appelé à le remplacer() pour laisser Angulaire savoir que les choses ont changé.

J'espère que ça fonctionne

28voto

Ross R Points 448

J’ai eu ce même problème, mais mon appel à $location était déjà dans un "Digest". Appel $apply() a juste donné un $digest déjà dans l’erreur de processus.

Cette astuce a fonctionné (et n’oubliez pas d’injecter `` dans votre commande) :

Bien qu’aucune idée pourquoi c’était nécessaire...

-1voto

Pramod Sharma Points 69

Essayez ceci juste après l’appel de location.path

-8voto

Akshay Points 1
<pre><code></code><p>Il devrait résoudre votre problème.</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X