JS(angular)::无法读取undefined的属性

时间:2015-10-14 14:45:33

标签: javascript angularjs

我尝试在类似的问题中搜索我的答案,但没有成功。

我正在尝试使用Angular / PhP / MySQL创建我的第一个登录页面。有一些很棒的文章给了我很多帮助,最后我终于开始工作了。 Al hard it it works在控制台中仍有1个错误,我无法弄清楚。

控制台SS :(注意我正在打印变量的控制台日志,以查看尝试转到主页时分配的内容) enter image description here

它甚至指出我需要查看的位置,第8行的' application.controller.js '。我在第9行打印出console.log,这给了我一个很好的结果(上面显示在控制台中)所以这就是我感到困惑的地方。

这是我的application.controller(部分):

app.run(function ($location, AUTH_EVENTS, AuthService) {

$rootScope.$on('$routeChangeStart', function (event, next) {

    var authorizedRoles = next.data.authorizedRoles;  <<< LINE 8
    console.log(authorizedRoles);            

    if (!AuthService.isAuthorized(authorizedRoles)) {
            event.preventDefault();

            if (AuthService.isAuthenticated()) {
                $location.path( "/login" );
            } else {
                $location.path( "/login" );
            }
     };

});  
});

' next.data.authorizedRoles '指向我的路由文件,如下所示:

app.config(function ($routeProvider, USER_ROLES) {

    $routeProvider
    .when('/', {
        templateUrl: 'views/home-page-display.php',
         data: {
                authorizedRoles: [USER_ROLES.admin, USER_ROLES.editor, USER_ROLES.guest]
               }
    })
    .when('/login', {
         templateUrl: 'views/login.php'
    })


    .otherwise({
         redirectTo: '/login'
    });

});

如果需要,这是我的工厂认证的一部分:

authService.isAuthenticated = function () {
    return !!Session.userId;
};

authService.isAuthorized = function (authorizedRoles) {
     if (!angular.isArray(authorizedRoles)) {
         authorizedRoles = [authorizedRoles];
     }

     return (authService.isAuthenticated() && authorizedRoles.indexOf(Session.userRole) !== -1);
};

登录工作并将重定向到我的主页但我无法摆脱这个错误。由于我的console.log()显示了正确的用户角色,我开始认为问题出在其他地方。

1 个答案:

答案 0 :(得分:0)

我找到了一个临时的&#39;溶液

在我的路线档案中,我已添加:

.when('/login', {
    templateUrl: 'views/login.php',
    data: {
           authorizedRoles: []
          }
})

当然,$ routeChangestart不允许没有权限的页面,也就是没有权限。所以在routechange函数中我添加了:

&& authorizedRoles != 0

以防止在没有分配任何角色时开火。

if (!AuthService.isAuthorized(authorizedRoles) && authorizedRoles != 0) {

可能有更好更清洁的解决方案,但至少我的错误信息已经消失! :)