2014-07-14 5 views
1

각도로 항목을 변경 한 경우 사용자가 양식을 나가는 것을 방지하려고합니다. 이것에 대한 기사를 읽고 $ locationChangeStart를 찾았습니다. 문제는 폼에서 뭔가를 수정 한 다음 다른 페이지로 이동 한 후에이 메서드가 트리거되지 않는다는 것입니다. 오직 window.onbeforeunload 만 호출됩니다. 내가 잘못

<form name="addEventForm" 
      method="POST" ng-controller="formController" confirm-on-exit> 
... 

</form> 

:

여기
.directive(
      'confirmOnExit', 
      function() { 
       return { 
        link : function($scope, elem, attrs) { 
         $scope 
           .$on(
             '$locationChangeStart', 
             function(event, next, current) { 
              if ($scope.addEventForm.$dirty) { 
               if (!confirm("The form is dirty, do you want to stay on the page?")) { 
                event.preventDefault(); 
               } 
              } 
             }); 
         window.onbeforeunload = function() { 
          if ($scope.addEventForm.$dirty) { 
           return "You have unsaved information!"; 
          } 
         }; 
        } 
       }; 

양식입니다 : 여기

는 지시인가?

+0

피들링을 제공 할 수 있습니까? – Raghavendra

+0

피들 또는 plunkr 함께 연주하는 것이 좋을 것입니다, 내 경우에는 내 코드에서, 나는 컨트롤러 및 작업 괜찮아요, 시도, 범위의 insteaad 범위 내에서 비교 해요, 사용 $ rootScope – Braulio

+0

당신이 돈을 마지막 괄호를 놓치지 마라. –

답변

0

이 문제가 발생하면 의견에 제안 된대로 $ rootScope를 $ locationChangeStart으로 시도하십시오. ngRoute를 사용하는 경우

$rootScope.$on('$stateChangeStart', warnIfUnsavedChanges); 

$ routeChangeStart : 당신이 코너 UI - 라우터를 사용하는 경우 또는 $ stateChangeStart를 사용합니다.

Difference between $locationChangeStart, $routeChangeStart, and $stateChangeStart

관련 문제