2014-02-18 4 views
2

이 문제를 해결하는 방법을 알아 내려고 지난 며칠 동안 인터넷을 조사했습니다. 나는 그 질문을 올바르게 말하지 않고 있는지, 아니면 그냥 볼 수없는 간단한 해결책인지 확신 할 수 없다.

내 문제는 내 $ routeProvider에서 각 경로에 '액세스'라는 속성을 추가하여 사용자가 로그인해야하는지 또는 'isFree'라는 변수를 사용하여 페이지를 보지 않았는지 확인하는 것입니다. 참 또는 거짓으로

예 :

$routeProvider 
.when('/', { 
    controller: 'homeController', 
    templateUrl: 'partials/home.html', 
    access: { isFree: true } 
}); 

이 페이지에 로그인 할 수있는 사용자를 필요로한다면 그럼 난 노선 변경 및 확인을위한 감시하는 .RUN 기능의 코드 블록을 가지고 있고 그들은 이미 로그인 한 경우. 'isFree'페이지가 true로 설정되면 페이지가로드되도록해야하고, 그렇지 않으면 사용자가 로그인되어 있는지 확인하고 그렇지 않은 경우 홈 페이지로 다시 리디렉션됩니다.

.run(['$rootScope', '$location', function($root, $location) { 
$root.$on('$routeChangeSuccess', function(scope, curRoute, prevRoute) { 
    if (!curRoute.access.isFree && !loggedIn) { 
    $location.path('/'); 
    } 
}); 

문제는이 코드가 작동하지 않는다는 것입니다. 문제는 홈 페이지에 처음으로로드 할 때 (isFree가 true로 설정된 경우) 콘솔에서 'isFree'가 정의되지 않은 오류가 발생한다는 것입니다. 첫 번째 오류가 발생한 후에도 홈페이지 자체가로드되고 사이트가 제대로 작동합니다. 그러나, 나는 그 오류가 처음에 나타나기를 원하지 않습니다. 지금까지 처음으로 홈페이지에 직접 링크 할 때 알아낼 수있는 것은 isFree 속성을로드하기 전에 확인하는 것이지만 아직 내 문제를 해결할 수는 없습니다. 누구든지 내가이 작은 문제를 해결하기 위해 무엇을 할 수 있는지 알고 있다면 그것을 인정할 것이다.

+0

당신이 $의 routeProvider.otherwise 정의가 있습니까? – tasseKATT

+0

네,하지만 'isFree'는 정의되지 않은 오류이기도합니다. 문제는 지금 해결되었습니다. Mather Berg의 솔루션이 효과가있었습니다. – Jacob

+0

다른 정의에 'access : {isFree : true}'를 추가 했습니까? 내 생각 엔 그렇지 않으면 defintion이 먼저 적중되고 $ routeChangeStart의 코드가 누락 된 access.isFree를 확인합니다. – tasseKATT

답변

1

은 curRoute.access가 정의되지 않은 것처럼, 그래서으로 이것을 시도 소리 당신 대신 if 문

if ((!curRoute.access || !curRoute.access.isFree) && !loggedIn) { 
    $location.path('/'); 
} 
+0

감사합니다. 나는 그것이 단순 할 무언가를 알았지 만, 솔직히 말해서 나는 나의 두뇌가 나와 협력하지 않는 지점에 도달했다. – Jacob

관련 문제