52 votes

AngularJS : comment obtenir le chemin d'accès au modèle ($location.path) ?

J'ai besoin du chemin actuel de l'url dans le modèle (contenu de $location.path). Mais pas via un contrôleur, car j'ai beaucoup de contrôleurs (et je ne veux pas dupliquer la déclaration de $scope.currentUrl = $location.path; ). Merci pour les conseils.

92voto

pkozlowski.opensource Points 52557

Le modèle AngularJS ne peut voir que ce qui est disponible dans un scope. Vous devrez donc, d'une manière ou d'une autre, placer le service $location dans un scope. Il existe un scope qui est toujours disponible dans une application AngularJS, appelé $rootScope, et qui peut donc être utilisé dans votre cas.

Ce que vous pouvez faire est d'utiliser la méthode run() d'un module pour exposer $location dans le $rootScope :

var myApp = angular.module('myApp', []).run(function($rootScope, $location) {
    $rootScope.location = $location;
});

Cela rendrait l'"emplacement" disponible dans tous les modèles, de sorte que vous pourriez le faire plus tard dans votre modèle :

Current path: {{location.path()}}

Voici un jsFiddle fonctionnel (utilisant absUrl() pour avoir un effet visuel) : http://jsfiddle.net/pkozlowski_opensource/uKXZX/2/

1voto

Dan Dascalescu Points 8165

Une alternative est d'utiliser l'outil plus sémantique et polyvalent ui-routeur puis dans le contrôleur, récupérer l'état actuel et le stocker sur le $scope :

app.controller('MyCtrl', ['$scope', '$state', function MyCtrl($scope, $state) {
  $scope.state = $state.current.name;
  ...
}

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