AngularJS - 根据路径元数据允许位置更改

时间:2014-09-29 19:09:49

标签: javascript angularjs

问题陈述:
根据用户是否已登录且某条路由是否安全 - 允许更改位置。因此,安全元数据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>

如果路线中没有参数,则一切正常 有任何想法吗?或者实现这个的替代方法?感谢。

1 个答案:

答案 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;
}

尽管如此,你可能会在上面的片段中得到含糊不清的结果......但我认为这种方法背后的想法是明确的;)