2015-10-14 131 views
0

我試過在類似的問題中搜索我的答案,但沒有成功。JS(angular)::無法讀取undefined的屬性

我正在嘗試使用Angular/PhP/MySQL創建我的第一個登錄頁面。有一些偉大的文章幫助了我很多,並最終讓它開始工作。艾爾強硬它的工作仍然有1錯誤的控制檯,我想不出。

控制檯SS:(注意我試圖去家頁時打印變量,看看是分配的控制檯日誌) enter image description here

它甚至指出,我需要看, 'application.controller.js'在第8行。我打印出第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); 
}; 

T他登錄作品,將重定向到我的主頁,但我無法擺脫這個錯誤。由於我的console.log()顯示正確的用戶角色,我開始認爲問題在於別處。

+0

我懷疑'$ routeChangeStart'被激發兩次。該屬性是第一次存在,但不是第二次。 – cgTag

+0

它似乎只在頁面上做,我沒有在我的路由中分配任何'authorizedRoles'。由於登錄頁面是唯一的情況,我應該改變$ routeChangestart函數,所以它只會檢查是否'/ login'或其他。 –

回答

0

我發現了一個'臨時'解決方案。

在我的路線文件,我說:

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

當然的$ routeChangestart不會允許此頁無權限,這是沒有的。因此,我添加了routechange功能:

&& authorizedRoles != 0 

防止在沒有指定角色時發射。

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

有可能是更好更清潔的解決方案,但至少我的錯誤消息已經消失! :)