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服务: