stateChangeStart - AngularJS

时间:2017-11-17 07:47:31

标签: javascript angularjs logging

我正在使用$ stateChangeStart进行登录。

在我的网站上,我有一些用户可以在未登录时访问的页面。

我编写此代码用于注销和某些页面上的检查访问。

但是当用户转到页面时(我不需要用户验证)我有问题

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
            console.log('TS', toState, 'TP', toParams, 'FS', fromState, 'FP', fromParams)
            if (!$rootScope.currentUser) {
                console.log('NO USER')
                if (toState.name !== 'login') {
                    event.preventDefault();
                    console.log('SOME ROUTE');
                    $state.go("login");
                }
                else if (toState.name !== 'about' ) {
                    console.log("about no user")
                    $state.go("about");
                }

            }
        });

任何想法我怎么能用$ stateChangeStart

来做到这一点

如果不起作用,则使用其他功能。

谢谢!

1 个答案:

答案 0 :(得分:1)

最佳做法是在每条路线上(在配置时)指定是否需要登录,

.state("users", {
   url: "/users",
   data: {
      requiresLogin: true
   }
})

然后您将能够检查状态是否需要登录每个导航,如下所示:

$rootScope.$on('$stateChangeStart', (event, toState, toParams, fromState, fromParams, options) => { 
    if(toState.data && toState.data.requiresLogin) {
       // validate the user here, if not valid navigate to Login
    }
});

作为奖励,您可以利用数据继承并指定需要登录abstract状态的路由范围。

e.state("users", {
    abstract: true,
    url: "/users",
    data: {
        requiresLogin: true
    }
})
.state("users.main", {
    url: "/",
    template: '<users-main></users-main>'
})
.state("users.page2", {
    url: "/page2",
    template: '<users-page2></users-page2>'
})

在上面的示例中,每个状态为用户的子状态(其名称前面都有users.前缀)将继承数据prop,因此需要登录。