como passar querystring em rotas angulares?

Eu estou trabalhando com rotas AngularJS e estou tentando ver como trabalhar com seqüências de consulta (por exemplo, url.com?key=value ? url.com?key=value ). Angular não entende a rota que contém o par de valores-chave para os albums mesmo nome:

 angular.module('myApp', ['myApp.directives', 'myApp.services']).config( ['$routeProvider', function($routeProvider) { $routeProvider. when('/albums', {templateUrl: 'albums.html', controller: albumsCtrl}). when('/albums?:album_id', {templateUrl: 'album_images.html', controller: albumsCtrl}). otherwise({redirectTo: '/home'}); }], ['$locationProvider', function($locationProvider) { $locationProvider.html5Mode = true; }] ); 

Não acho que as rotas funcionem com strings de consulta. Em vez de url.com?key=value você pode usar um URL mais REST, como url.com/key/value? Então você definiria suas rotas da seguinte maneira:

 .when('/albums', ...) .when('/albums/id/:album_id', ...) 

ou talvez

 .when('/albums', ...) .when('/albums/:album_id', ...) 

É correto que as rotas não funcionem com strings de consulta, no entanto, isso não significa que você não pode usar strings de consulta para passar dados entre páginas ao alternar rotas! A limitação gritante com parâmetros de rota é que eles não podem ser atualizados sem recarregar a página. Às vezes isso não é desejado, por exemplo, depois de salvar um novo registro. O parâmetro de rota original era um 0 (para significar um novo registro) e agora você deseja atualizá-lo com o ID correto retornado por meio do ajax para que, se o usuário atualizar a página, ele veja o registro recém-salvo. Não há como fazer isso com parâmetros de rota, mas isso pode ser feito usando strings de consulta.

O segredo não é include a string de consulta ao alterar a rota, pois isso fará com que ela não corresponda ao modelo da rota. O que você pode fazer é alterar a rota e depois aplicar os parâmetros da string de consulta. Basicamente

 $location.path('/RouteTemplateName').search('queryStringKey', value).search( ... 

A beleza aqui é que o serviço $ routeParams trata os valores da string de consulta de forma idêntica aos parâmetros reais da rota, assim você não precisará nem mesmo atualizar seu código para lidar com eles de maneira diferente. Agora você pode atualizar os parâmetros sem recarregar a página incluindo reloadOnSearch: false na sua definição de rota.

Você pode ver o método de search em $location ( docs ). Ele permite que você adicione algumas chaves / valores ao URL.

Por exemplo, $location.search({"a":"b"}); retornará este URL: http://www.example.com/base/path?a=b .

use params de rota

 var Ctrl = function($scope, $params) { if($params.filtered) { //make sure that the ID is there and use a different URL for the JSON data } else { //use the URL for JSON data that fetches all the data } }; Ctrl.$inject = ['$scope', '$routeParams']; 

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

Eu só consigo pensar em dois casos para a querystring na URL:

1) Se você precisar do par chave / valor de sua querystring em seu controlador (por exemplo, para imprimir Hello {{name}} e obter o nome em querystring como? Name = John), então, como Francios disse, use $ location. search e você receberá o querystring como um object ({name: John}) que você pode usar colocando-o no escopo ou algo assim (por exemplo, $ scope.name = location.search (). name;).

Se você precisar redirect para outra página em seu roteador com base no que é fornecido na querystring, como (? Page = Thatpage.htm), crie um redirectTo: em seu routerProvider.when () e ele receberá o object de pesquisa como seu terceiro parâmetro. olhe para 2:10 do seguinte Vídeo EggHead: http://www.thinkster.io/pick/SzcF8bGeVy/angularjs-redirectto

Basicamente, redirectTo: function (routeParams, caminho, pesquisa) {return search.page}