이 문제를 해결하는 방법을 알아 내려고 지난 며칠 동안 인터넷을 조사했습니다. 나는 그 질문을 올바르게 말하지 않고 있는지, 아니면 그냥 볼 수없는 간단한 해결책인지 확신 할 수 없다.
내 문제는 내 $ 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 속성을로드하기 전에 확인하는 것이지만 아직 내 문제를 해결할 수는 없습니다. 누구든지 내가이 작은 문제를 해결하기 위해 무엇을 할 수 있는지 알고 있다면 그것을 인정할 것이다.
당신이 $의 routeProvider.otherwise 정의가 있습니까? – tasseKATT
네,하지만 'isFree'는 정의되지 않은 오류이기도합니다. 문제는 지금 해결되었습니다. Mather Berg의 솔루션이 효과가있었습니다. – Jacob
다른 정의에 'access : {isFree : true}'를 추가 했습니까? 내 생각 엔 그렇지 않으면 defintion이 먼저 적중되고 $ routeChangeStart의 코드가 누락 된 access.isFree를 확인합니다. – tasseKATT