我只是在设置这个:
app.config(['$routeProvider',function($routeProvider) {
$routeProvider
.when('/asd/:id/:slug',{
templateUrl:'views/home/index.html',
controller:'Home',
publicAccess:true,
sessionAccess:true
});
:id和:slug是动态参数。
现在我想check if current url matches
该路线(/asd/:id/:slug
)
例如网址:asd/5/it-is-a-slug
这是最简单的方法吗?
我试过这个:
$rootScope.$on('$routeChangeStart', function(){
console.log($route.current);
});
但有时在切换页面路径时它在控制台中什么都不返回
答案 0 :(得分:25)
当前路线允许您使用正则表达式。注入$route
服务并浏览当前路由对象。即regexp
部分:
$route.current.regexp
这是你如何使用它(例如从控制器方法检查当前菜单项(具有动态部分)是否应该被激活):
$scope.isActive = function (path) {
if ($route.current && $route.current.regexp) {
return $route.current.regexp.test(path);
}
return false;
};
答案 1 :(得分:1)
您可以尝试这样的事情:
$routeProvider.when('/asd/:id/:slug', {
templateUrl: '/views/template.html',
controller: 'YourController',
resolve: {
data: ['$route', 'SecurityFactory',
function ($route, SecurityFactory) {
var id= parseInt($route.current.params.id, 10);
var slug= $route.current.params.slug;
SecurityFactory.checkParams(id, slug);
}
]
}
});
然后在 SecurityFactory 内,您可以检查参数的有效性。例如,使用 RegExp 。
答案 2 :(得分:0)
不是一个非常优雅的解决方案,我只在Chrome DevTools中进行了测试,但似乎有效:
Object.getPrototypeOf($route.current) === $route.routes['/asd/:id/:slug'];
似乎$ routes服务的routes属性是一个对象文字,其键设置为每个路由的模式。
对于想要使用此功能的其他人,只需将'/asd/:id/:slug'
替换为您在定义路线时使用的模式。
此外,如果您想匹配otherwise
路径,请使用$route.routes['null']
免责声明:这只是我找到的解决方法,对我有用。鉴于此行为未记录,并且我没有对其进行测试以确定它是否适用于所有方案,因此使用它需要您自担风险。