如何在angular度路由中传递查询string?

我正在使用AngularJS路线,并试图查看如何使用查询string(例如, url.com?key=value )。 Angular不理解包含相同名字albums的键值对的路线:

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

我不认为路由与查询string一起工作。 而不是url.com?key=value你可以使用更多的RESTful URL,如url.com/key/value? 然后你会定义你的路线如下:

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

或者可能

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

路由不适用于查询string是正确的,但这并不意味着在切换路由时不能使用查询string在页面之间传递数据! 路由参数的明显限制是,如果不重新加载页面,则无法更新。 有时这是不希望的,例如保存一个新的logging后。 原始的路由参数是0(表示一个新的logging),现在你想用正确的ID通过ajax返回来更新它,这样如果用户刷新页面,他们将看到他们新保存的logging。 有没有办法做到这一点与路由参数,但这可以通过使用查询string来完成。

在更改路由时,秘密是不包括查询string,因为这将导致它不匹配路由模板。 你可以做的是改变路线,然后应用查询string参数。 基本上

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

这里的美妙之处在于$ routeParams服务将查询string值视为真实的路由参数,所以您甚至不必更新代码来处理它们。 现在,您可以通过在path定义中包含reloadOnSearch:false来更新参数,而无需重新加载页面。

您可以查看$locationdocs )中的search方法。 它允许你添加一些键/值的URL。

例如, $location.search({"a":"b"}); 将返回这个url: http://www.example.com/base/path?a=bhttp://www.example.com/base/path?a=b

使用路由参数

 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.$ro​​uteParams

我只能想到URL中查询string的两个用例:

1)如果你需要在你的控制器中查询string的键/值对(例如打印Hello {{name}}并在查询string中获得名称,例如?name = John),那么Francios说只需使用$ location。search,你会得到querystring作为一个对象({名称:约翰),然后你可以通过把它放在作用域或东西(例如$ scope.name = location.search()。name;)。

如果您需要根据查询string中给出的内容redirect到路由器中的其他页面,如(?page = Thatpage.htm),则在您的routerProvider.when()中创build一个redirectTo:,它将接收search对象作为其第三个参数。 看看下面EggHeadvideo的2:10: http : //www.thinkster.io/pick/SzcF8bGeVy/angularjs-redirectto

基本上,redirectTo:function(routeParams,path,search){return search.page}