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.
Réponses
Trop de publicités?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/
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;
...
}