Angularjs 为什么';在$state.transition(';login';)之后提交工作;
我正在使用ui路由器在角度应用程序中进行路由。在httpInterceptor中,我正在检查身份验证拒绝,如果发现拒绝,则转换到“登录”路径。一切看起来都正常,但即使登录按钮最初工作(在访问任何其他页面之前),在转换到fire后,登录按钮的表单ng submit不会启动,就好像控制器没有加载一样,但没有错误。以下是我用于转换的内容:Angularjs 为什么';在$state.transition(';login';)之后提交工作;,angularjs,angular-ui-router,angular-promise,Angularjs,Angular Ui Router,Angular Promise,我正在使用ui路由器在角度应用程序中进行路由。在httpInterceptor中,我正在检查身份验证拒绝,如果发现拒绝,则转换到“登录”路径。一切看起来都正常,但即使登录按钮最初工作(在访问任何其他页面之前),在转换到fire后,登录按钮的表单ng submit不会启动,就好像控制器没有加载一样,但没有错误。以下是我用于转换的内容: var pendingAuthRequest; this.responseError = function(response) { if (response
var pendingAuthRequest;
this.responseError = function(response) {
if (response.status === 401 { //slightly truncated for brevity
var defer = $q.defer();
if (!pendingAuthRequest) {
pendingAuthRequest = AuthenticationService.refreshToken();
}
pendingAuthRequest.then(
function() {
pendingAuthRequest = undefined;
defer.resolve(response);
},
function() {
pendingAuthRequest = undefined;
defer.reject(response);
}
);
return defer.promise.then(
function() {
return ResolverService.get.$http(response.config);
},
function() {
//probably a righter way to do this
ResolverService.get.$state.transitionTo('login');
return $q.reject(response);
}
);
}
else {
return $q.reject(response);
}
};
以下是路线:
$stateProvider.state('login', {
url: '/login',
templateUrl: 'components/user/login.html',
controller: 'loginComponentCtrl as login',
data: {
title: 'Dashboard',
titleIcon: 'fa-tachometer',
noAuth: true
}
});
这是登录按钮设置,这并不奇怪
<form name="login-form" ng-submit="login.login()">
...
<button type="submit" ng-if="login.processing !== true">Login</button>
同样,登录页面在最初加载时可以正常工作,但在使用上述代码段转换到之后就不行了。刷新可解决此问题。知道这里发生了什么吗
(function() {
'use strict';
var app = angular.module('ctk.components.login', []);
app.controller('loginComponentCtrl', ['AuthenticationService', loginComponentCtrl]);
function loginComponentCtrl(AuthenticationService) {
var self = this;
self.processing = false;
self.login = function() {
self.processing = true;
AuthenticationService.login(self.username, self.password)
.then(function(success) {
}, function(failureReason) {
self.errorMessage = failureReason;
})
.finally(function() {
self.processing = false;
});
};
}
}());