2014-01-28 3 views
4

에 서버 측 리소스 인 resolve이 있어야합니다. 해당 자원이 인증을 요청합니다. 그래서 나는 취소 할 수있는 로그인 폼 팝업을 보여줍니다. 취소시 route/resolve가 rejected$routeChangeError이 올바르게 실행됩니다.

문제는 주소 표시 줄에 불필요한 위치/URL과 불필요한 기록 항목이 있다는 것입니다.

어떻게 현재 위치 URL을 다시로드하지 않고 마지막 위치 URL로 바꾸시겠습니까? 경로 변경이 실패한 후에 어떻게 현재 기록 항목을 제거합니까?

편집 : 나는 angular-http-auth를 사용합니다. 나는 $ routeChangeError 가져 인증을 취소 할 때

/home>/item (인증이 필요한 리소스를 해결해야하고, 로그인 폼 팝업 로그인하지 않은 경우가 열립니다까지 취소 할 수 있습니다)

: 여기 내 라우팅입니다 해고 나는 여전히 /home 로 인해 페이지에 페이지에있어. 이제 주소 표시 줄에 잘못된 URL이 표시됩니다. /item

답변

2

기록에 한 걸음 뒤로 돌려 보내면됩니다. 역사 기록들은 다음 일은로 이동하는 경우가 덮어 쓰게됩니다, 거기에 대해 걱정하지 마십시오 :

app.run(function($rootScope, $window) { 
    $rootScope.$on('$routeChangeError', function() { 
     $window.history.back(); 
    }); 
}); 

And here's a demo Plunk

+0

감사합니다,하지만 난/정지 이미있어 페이지를 다시로드 나십니까 route-resource-name을 사용하여 경로상의 자원 (resolve 포함)이 인증을 필요로 할 때 login-pop-up을 사용합니다. 로그인 팝업을 취소하면 올바른 페이지가 표시되지만 잘못된 위치가 표시됩니다. $ location.replace()를 사용하면 다음 경로 변경시 불필요한 기록 항목을 제거 할 수 있습니다. 하지만 그건 해결책이 아닙니다. 동일한 페이지를 다시로드하지 않고 $ routeChangeError에서 $ 위치를 변경해야합니다. – tagomago

+0

더 많은 코드를 제공해야합니다. 네가해야 할 일에 대한 아이디어가 있다고 생각했지만, 지금 너는 뭘 하려는지 전혀 모른다. 또한 "angular-http-auth"또는 사용하고있는 모듈에 대한 질문을 태그로 지정하고 모듈 작성자에게 링크를 보내는 것이 좋습니다. –

+0

불행히도 "angular-http-auth"라는 새 태그를 열 수 없습니다. – tagomago