2014-04-14 3 views
0

app.js에 3 개의 경로가 있지만 다른 경로로 만들기에서 전환 할 때 사용자가 의도적으로 전환 할 것인지 또는 실수했는지 확인하고 싶습니다. 사용자가 페이지에 머무르거나 페이지를 떠날 것을 요구하는 리턴 팝업이 될 것입니다. 보통의 경우는이 코드 일 것이다 :각도 : 함수 호출을 기반으로 경로를 전환하는 방법

window.onbeforeunload = confirmExit; 
function confirmExit() { 
    return "You have attempted to leave this page. Are you sure?"; 
} 

하지만이 SPA 응용 프로그램이기 때문에 내가 노선 전환하는 동안이 기능을 실행해야합니다 :

여기

나의 ROUTES입니다

testApp.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/tests', { 
     templateUrl: 'partials/list.html', 
     controller: 'ListCtrl' 
     }). 
     when('/tests/:testsId', { 
     templateUrl: 'partials/detail.html', 
     controller: 'DetailCtrl' 
     }). 
     when('/create/', { 
     templateUrl: 'partials/create.html', 
     controller: 'CreateCtrl' 
     }). 
     otherwise({ 
     redirectTo: '/tests' 
     }); 
    }]); 

어떤 도움을 많이 주시면 감사하겠습니다.

답변

0

내가 각도 지침이에게 것 :

.directive('confirm', [ 
    function() { 
     return { 
      restrict: 'AEC', 
      link: function($scope, element) { 
       element.bind('click', function(event) { 

         if (!confirm('You have attempted to leave this page. Are you sure?')) { 
          event.preventDefault(); 
          return false; 
         } 
       }); 
      } 
     }; 
    } 
]); 

하고 HTML에서 :

<a href="/route" confirm>link</a> 

표준 링크 리디렉션 차단 얻을 것이다이 방법과 리디렉션 경우에만 발생합니다 사용자 확인 그것.

작업 바이올린 : http://jsfiddle.net/HB7LU/3119/

편집 : 제거 JQuery와 참조 + jsfiddle 링크

EDIT2 : (백 스페이스 키 또는 페이지에있는 클릭 링크 등) 글로벌 리디렉션 차단을위한이 참조 바이올린 http://jsfiddle.net/9MnE9/124/

여기서는 $routeChangeStart을 사용하여 위치 변경을 확인합니다.

+0

누군가 "백 스페이스"를 누르면 어떻게됩니까? – Alex

+0

언제? 리디렉션 후? 그는 다른 SPA/웹 사이트와 마찬가지로 이전 페이지로 리디렉션되지만 위치 기록에 새 경로를 추가하는 대신 위치를 바꾸지 않도록 선택할 수 있습니다 (질문에 포함되지 않음). –

+0

아니요, 묻습니다. 페이지 만들기 및 백 스페이스를 누르면 다른 페이지에서 왔을 수 있으므로이 경우에는 해당 페이지로 다시 리디렉션됩니다.이 지시어는 트리거되지 않습니다. – Alex

관련 문제