2017-08-25 3 views
0

Wir verwenden AngularJS 1.6 und haben unten Anweisung geschrieben, um Formular zu übermitteln.Catch Exception in Angular Direktive

(function() { 
    "use strict"; 

    function formSubmitDirective(cookieService) { 
     return { 
      require: "form", 
      link: function ($scope, $el) { 
       var csrf = cookieService.csrfTokenCookie(); 
       $el[0].querySelector('#csrf').value = csrf; 
       $el[0].submit(); 
      } 
     }; 
    } 

    formSubmitDirective.$inject = ['cookieService']; 

    angular 
     .module('csmDirectives') 
     .directive('csmFormSubmit', formSubmitDirective); 

}()); 

Hier verwenden wir es:

<div ng-if="vm.autoLogout"> 
    <form csm-form-submit role="form" action="/app/logout" method="POST"> 
     <input type="hidden" id="csrf" name="_csrf" ng-value="vm.csrfToken"/> 
    </form> 
</div> 

Das Problem ist, dass die Anwendungen während der POST-Anforderung manchmal Fehler 403 erzeugt. In diesem Fall möchte ich diese Ausnahme fangen und die Seite unter url verschieben möchte:

localhost:8080/app/index.html#timeout 

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

Sie könnten Ihren einreichen Anruf ändern:

link: function ($scope, $el) { 
    var csrf = cookieService.csrfTokenCookie(); 
    $el[0].querySelector('#csrf').value = csrf; 
    try { 
    $el[0].submit(); 
    } catch(e) { 
    // You would have to define a timeout-state 'state', assuming you're 
    // using states though; 
    state.go('timeout-state'); 
    } 
}, 
controller: function($state, $stateParams) { 
    var scope = this; 
    scope.state = $state; 
} 

ich nicht getestet haben, aber Sie würden den Controller dort benötigen Zugriff auf $ Zustand zu erhalten. All dies setzt voraus, dass Sie eine Art von $ -Zustand verwenden (könnte stattdessen $ routeProvider sein), aber wenn Sie Angular1.6 verwenden, ist es eine gute Wette, die Sie sind.

+0

Es sieht aus wie eine echte Form Post auftritt, also bin ich mir nicht sicher, ob Sie den Fehler so abfangen können –