Angular 1 – obtenha os parâmetros de URL atuais

Eu quero extrair dados do URL atual e usá-lo no controlador. Por exemplo, eu tenho esse URL:

app.dev/backend/surveys/2

Bits que eu quero extrair:

app.dev/backend/ : type / : id

Existe alguma coisa no Angular que possa me ajudar nessa tarefa?

Para obter parâmetros de URL com ngRoute . Isso significa que você precisará include o angular-route.js em seu aplicativo como uma dependência. Mais informações sobre como fazer isso na documentação oficial do ngRoute .

A solução para a pergunta:

 // 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); }); 

Se você não ativar o $locationProvider.html5Mode(true); . Urls usará hashbang ( /#/ ).

Mais informações sobre o roteamento podem ser encontradas na documentação oficial da API angular $ route .


Nota: Esta pergunta está respondendo como conseguir isso usando o ng-Route, no entanto, eu recomendo usar o ui-roteador para roteamento. É mais flexível, oferece mais funcionalidade, as documentações são ótimas e é considerada a melhor biblioteca de roteamento para imagens angulares.

Você pode injetar $routeParams em seu controlador e acessar todos os parâmetros que foram usados ​​quando a rota foi resolvida.

Por exemplo:

 // route was: app.dev/backend/:type/:id function MyCtrl($scope, $routeParams, $log) { // use the params $log.info($routeParams.type, $routeParams.id); }; 

Veja a documentação angular $ routeParams para mais informações.

Melhor teria sido gerar url como

 app.dev/backend?type=surveys&id=2 

e depois usar

 var type=$location.search().type; var id=$location.search().id; 

e injetar $ location no controller.

Na sua configuração de rota, você normalmente define uma rota como

 .when('somewhere/:param1/:param2') 

Você pode então obter a rota no object de resolução usando $route.current.params ou em um controlador, $routeParams . Em ambos os casos, os parâmetros são extraídos usando o mapeamento da rota, portanto, param1 pode ser acessado por $routeParams.param1 no controlador.

Edit : Observe também que o mapeamento tem que ser exato

 /some/folder/:param1 

Apenas corresponderá a um único parâmetro.

 /some/folder/:param1/:param2 

Apenas corresponderá a dois parâmetros.

Isso é um pouco diferente do que as rotas do lado do servidor mais dinâmicas. Por exemplo, o mapeamento de rotas NodeJS (Express), onde você pode fornecer apenas uma única rota com o número X de parâmetros.

ex: url /: id

 var sample= app.controller('sample', function ($scope, $routeParams) { $scope.init = function () { var qa_id = $routeParams.qa_id; } }); 

Basta injetar o serviço routeParams:

http://docs.angularjs.org/api/ngRoute.$routeParams