Angular指令中的Catch Exception

时间:2017-08-25 13:18:14

标签: angularjs

我们正在使用AngularJS 1.6,并在下面写了指令来提交表单。

(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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分: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。所有这些假设您使用某种$ state(可能是$ routeProvider),但如果您使用的是Angular1.6,那么您就是一个不错的选择。