Angular 1 – 获取当前的URL参数

我想从当前URL中提取数据并在控制器中使用它。 例如,我有这个url:

app.dev/backend/surveys/2

我想提取的位:

app.dev/backend/:type / :id

Angular中有什么可以帮助我完成这个任务吗?

ngRoute从URL获取参数。 这意味着您需要将angular-route.js作为依赖项包含在您的应用程序中。 更多信息如何在官方的ngRoute文档上做到这一点。

问题的解决scheme:

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

如果您不启用$locationProvider.html5Mode(true); 。 url将使用hashbang( /#/ )。

有关路由的更多信息可以在官方的$ angular API文档中find 。


附注:这个问题正在回答如何使用ng-Route来实现这一点,但是我build议使用ui-Router进行路由。 它更灵活,提供更多的function,文件是伟大的,它被认为是angular度最好的路由库。

您可以将$routeParams注入到您的控制器,并访问解决路由时使用的所有参数。

例如:

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

有关更多信息,请参阅angular度$ routeParams文档 。

更好的是会产生类似的url

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

然后使用

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

并在控制器中注入$ location。

在你的路线configuration中,你通常定义一个路线,

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

然后,您可以使用$route.current.params或在控制器$routeParams获取parsing对象中的$routeParams 。 无论哪种情况,参数都是使用路由映射提取的,所以param1可以通过控制器中的$routeParams.param1来访问。

编辑 :另外请注意,映射必须是确切的

 /some/folder/:param1 

只会匹配一个参数。

 /some/folder/:param1/:param2 

只会匹配两个参数。

这与大多数dynamic服务器端路由有点不同。 例如NodeJS(快速)路由映射,您可以只提供一个具有X个参数的单个路由。

例如:url /:id

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

只需要注入routeParams服务:

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