问题陈述:
根据用户是否已登录且某条路由是否安全 - 允许更改位置。因此,安全元数据true / false是针对路线声明的。
.when('/myapp', {
templateUrl : function($node, tattrs) {
return "resources/html/home.html";
},
controller : 'mainController',
secure: false
})
.when('/myapp/editorder/:orderId', {
templateUrl : 'resources/html/order.html',
controller : 'orderController',
secure: true
})
..... .....
.run(function ($rootScope, $location, $route) {
$rootScope.$on("$locationChangeStart",function(event, next, current){
var nextPath = $location.path();
nextRoute = $route.routes[nextPath];
if( !$rootScope.MyUserService.isLoggedIn && nextRoute.secure ){
//prevent location change.
event.preventDefault();
}
})
})
问题:
如果路径在模板URL中有一个参数,例如:/ myapp / editorder /:orderId(本例中为orderId),则nextRoute变为未定义,因此我无法访问 nextRoute.secure
< / p>
如果路线中没有参数,则一切正常 有任何想法吗?或者实现这个的替代方法?感谢。
答案 0 :(得分:0)
不是很优雅,但我不确定是否还有其他方法可以实现......虽然这样做会:
var getRouteByPath = function(path){
var matchedRoute;
angular.forEach($route.routes, function(route, key){
if (!matchedRoute) {
if (key.indexOf(path) === 0) {
matchedRoute = route;
}
}
});
return matchedRoute;
}
尽管如此,你可能会在上面的片段中得到含糊不清的结果......但我认为这种方法背后的想法是明确的;)