AngularJS - 获取定义的路由列表 - $routeProvider [英] AngularJS - get the list of defined routes - $routeProvider
问题描述
我正在尝试实现命名路由
,所以我不必编写整个路径(经常更改).
I am trying to implement named routes
, so I don't have to write the whole path (often changes).
我想我可以通过编写一个服务来返回定义的路由列表和一个将对象转换为路由的过滤器
I was thinking I could get away with writing a service that would return the list of defined routes and a filter that would transform object to aroute
使用示例如下所示:
<a ng-href="{id:1}|route:'detail'">Click here!</a>
如果我在路由定义中添加了 name:'detail',这将生成以下结果:
Provided I have added name:'detail' to my route definition, this would generate the following result :
<a href="#/detail/1/">Click here!</a>
我认为这很简单,但是:
I think this is quite simple, but:
如何获取已定义路线的列表?
我想我可以使用 routeProvider
,但 AFAIK 它没有我可以访问的公共方法或属性.
I was thinking I can make use of routeProvider
, but AFAIK it has no public methods or attributes I can access.
推荐答案
事实证明这是非常简单的:
turns out this is pretty straight forward:
http://plunker.co/edit/GNZxcvK4hfQ9LrlSvasK?p=preview
Components.filter('url', function ($route) {
function resolveRoute(options, route) {
var parts = route.split('/');
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part[0] === ':') {
parts[i] = options[part.replace(':', '')];
if (parts[i] == undefined) throw Error('Attribute \'' + part + '\' was not given for route \'' + route + '\'')
}
}
return parts.join('/');
}
return function (options, routeName) {
var routes = [];
angular.forEach($route.routes,function (config,route) {
if(config.name===routeName){
routes.push(route);
}
});
if (routes.length == 1) {
return resolveRoute(options, routes[0]);
}
else if (routes.length == 0) {
throw Error('Route ' + routeName + ' not found');
}
throw Error('Multiple routes matching ' + routeName + ' were found');
}
});
这篇关于AngularJS - 获取定义的路由列表 - $routeProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!