Je souhaite extraire des données de l'URL actuelle et les utiliser dans le contrôleur. Par exemple, j'ai cette URL:
app.dev/backend/surveys/2
Bits que je veux extraire:
app.dev/backend/ : type/: id
Y at-il quelque chose dans Angular qui pourrait m'aider dans cette tâche?
Pour obtenir les paramètres de l'URL avec ngRoute
. Cela signifie que vous devrez inclure angular-route.js dans votre application en tant que dépendance. Plus d'informations sur la façon de le faire sur officiel documentation de ngRoute .
La solution à la question:
// You need to add 'ngRoute' as a dependency in your app
angular.module('ngApp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
// configure the routing rules here
$routeProvider.when('/backend/:type/:id', {
controller: 'PagesCtrl'
});
// enable HTML5mode to disable hashbang urls
$locationProvider.html5Mode(true);
})
.controller('PagesCtrl', function ($routeParams) {
console.log($routeParams.id, $routeParams.type);
});
Si vous n'activez pas la $locationProvider.html5Mode(true);
. Les URL utiliseront hashbang (/#/
).
Plus d'informations sur le routage sont disponibles sur angular documentation de l'API $ route) .
Note latérale: Cette question répond à la question de savoir comment y parvenir en utilisant ng-Route. Toutefois, je vous recommande d'utiliser le - ui-Router pour le routage. Il est plus flexible, offre plus de fonctionnalités, la documentation est excellente et est considérée comme la meilleure bibliothèque de routage angulaire.
Vous pourriez injecter $routeParams
sur votre contrôleur et accédez à tous les paramètres utilisés lors de la résolution de la route.
Par exemple.:
// route was: app.dev/backend/:type/:id
function MyCtrl($scope, $routeParams, $log) {
// use the params
$log.info($routeParams.type, $routeParams.id);
};
Voir documentation $ routeParams angulaire pour plus d'informations.
Mieux aurait été générer url comme
app.dev/backend?type=surveys&id=2
et ensuite utiliser
var type=$location.search().type;
var id=$location.search().id;
et injecter $ location dans le contrôleur.
Dans votre configuration d'itinéraire, vous définissez généralement un itinéraire tel que,
.when('somewhere/:param1/:param2')
Vous pouvez alors obtenir la route dans l'objet de résolution en utilisant $route.current.params
ou dans un contrôleur, $routeParams
. Dans les deux cas, les paramètres sont extraits en utilisant le mappage de la route, donc param1
peut être consulté par $routeParams.param1
dans le contrôleur.
Edit: Notez également que le mappage doit être exact
/some/folder/:param1
Ne correspondra qu'à un seul paramètre.
/some/folder/:param1/:param2
Ne correspondra qu'à deux paramètres.
C'est un peu différent de la plupart des routes côté serveur dynamiques. Par exemple, le mappage de route NodeJS (Express) où vous ne pouvez fournir qu'un seul itinéraire avec un nombre X de paramètres.
ex: url /: id
var sample= app.controller('sample', function ($scope, $routeParams) {
$scope.init = function () {
var qa_id = $routeParams.qa_id;
}
});
Il suffit d'injecter le service routeParams: