javascript - stateChangeStart - AngularJS

标签 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 做到这一点

这与 else if 不起作用。

谢谢!

最佳答案

最佳实践是在每个路由上指定(在配置时)是否需要登录,

.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. 前缀)将继承 data 属性,因此需要登录。

关于javascript - stateChangeStart - AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47345653/

相关文章:

javascript - AddThis:Facebook 共享忽略共享配置

angularjs - 如何在其他地方处理 angular.service 变更?

ruby - 使 Ruby 记录器自动刷新

java - 以编程方式将 Logback 设置为记录到 gzip 文件

c# - 连续记录方法、调用和退出时间

javascript - 如何在运行在 node.js 上的脚本中使用 jsdoc?

javascript - 使用 HTML 标记设置文本格式,并从 JavaScript 中的字符串中删除不需要的文本

javascript - 从 AngularJS 服务销毁事件监听器

javascript - 如何使用 ui-router 测试依赖于服务的 AngularJS Controller ?

javascript - 使用三元操作遍历 JSON