我们正在使用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
有没有办法做到这一点?
答案 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,那么您就是一个不错的选择。