任何人都知道angular
中是否有工具(或内置功能)从url
字符串中获取路径对象?
实施例
我设置了这样的路线导航:
$routeProvider
.when('/users/:id',
{
templateUrl: 'components/users/edit.html',
controller: 'UsersCtrl',
access: {
requiresLogin: true,
roles: ['Admin']
}
});
我有一个像/users/2
这样的字符串,我希望能够获得与该字符串相关联的路由对象,该对象包含templateUrl
,controller
和access properties
我可以看到$route.routes
中定义的所有路线,但路线的格式为/users/:id
,因此我必须手动解析url
。
这样做的目的是基于路线导航保护ui-elements
(使用directive
)(例如带有授权标签的弹簧安全性)
我的directive
名为navigate-to
,directive
允许我像buttons
一样使用anchor
<button navigate-to="/users/{{user.id}}">Edit</button>
我想确定当前用户是否可以导航到目标url
(实际上没有导航到目标)。
我可以使用$routeChangeStart
事件保护导航,我需要的是在路由之前访问路由信息(以执行安全检查)。
解决: 我找到了方法(查看$ route源代码)来匹配url并获取路由对象(手动),不理想,但它的工作原理。以下是获取路线信息的功能:
var getRouteInfo = function(path) {
var matched = false,
matchedRoute = null;
angular.forEach($route.routes, function(route) {
if (!route.regexp) return;
if (!matched && route.regexp.exec(path)) {
matched = true;
matchedRoute = route;
}
});
return matchedRoute;
};