Angular.js:在路由更改之前访问url参数

时间:2014-05-20 09:20:21

标签: angularjs

我尝试了一种新的角度身份验证架构,并遇到了带有通配符参数的路由问题......

在我的路线配置中,我设置了

      .when('/:username', {
            templateUrl: '/views/client/login.html',
            controller: 'ClientLoginCtrl'
        })

       .when('/:username/dashboard', {
            templateUrl: '/views/client/dashboard.html',
            controller: 'ClientDashboardCtrl',
            accessLevel: ACCESS_LEVELS.client
        })

这样每个用户在网址中都有自己的文件夹。并且用户仪表板路由受到保护。

我设置了一个常量定义级别和未经过身份验证的路由。正如您在下面看到的,我尝试设置一个/:username参数,因为我想将它们返回到用户登录页面,如果他们试图转到更深的页面而没有登录...

.constant('ACCESS_LEVELS', {
    client: {
        level: 1,
        denied: '/:username'
    },
    admin: {
        level: 2,
        denied: '/admin'
    }
})

然后我在$ routeChangeStart事件中测试它们是否经过身份验证..如果没有..我想将用户返回到上面常量中定义的拒绝路由...

.run(function($rootScope, $location, Auth){

    $rootScope.$on('$routeChangeStart', function(evt, next){
            if(!Auth.isAuthorised(next.$$route.accessLevel.level))
            {
                   $location.path(next.$$route.accessLevel.denied);
            }
    });

在我在网址中引入:username参数之前,这一切都很有效。 $ routeParams不会设置,直到路由发生变化,因此在$ routeChangeStart事件中不可用。如果我转到/ sample-user / dashboard并且没有登录,则URL会更改为/:username ... not / sample-user,这是我想要的。

有人能想出解决这个问题的简单方法吗?

0 个答案:

没有答案