2017-08-25 18 views
0

AngularJS 1.6を使用しており、フォームを送信するための指示が以下に書かれています。ここでAngularディレクティブで例外をキャッチ

(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); 

}()); 

我々はそれを使用している:

<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> 

問題は、アプリケーションが時々POSTリクエスト中に403エラーが発生していることです。その場合、私はその例外をキャッチしたいとURL以下にページを移動したい:

localhost:8080/app/index.html#timeout 

はこれを行う方法はありますか?

答えて

0

あなたが提出コール変えることができます:私はこれをテストしていませんが、あなたは$の状態へのアクセスを得るためにそこにコントローラが必要になる

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; 
} 

を。これはすべて$ state($ routeProviderの代わりに)を使用していると仮定していますが、Angular1.6を使用している場合は、それは良い賭けです。

+0

本当のフォームのポストが発生しているようですので、このようなエラーを捕まえることはできません –