我想创建登录表单,然后将其提交到服务器端并重定向,如果响应成功。因为延迟,$ location doen&work。
再次提交时(提交当前表格两次),它会重定向。那么问题是什么?
当我尝试使用if else而不是dojo.ajax来检查用户帐户时,重定向工作。所以我认为关键原因是延迟了。
我尝试使用resolve来处理帖子,但我发现很难通过$ scope获取表单数据,实际上$ scope doen还没有工作。你有没有解决这个问题的方法?
controller.js
$scope.loginForm = function(){
var loginInfo = {
"userName":$scope.formData.userName,
"passWord":$scope.formData.passWord
};
//$scope.msgText='asfdasfd';
loginService.getLoginData(loginInfo,loginSuccess);
};
var loginSuccess = function(data){
console.log('loginSuccess works//'+data);
if(data){
$location.path('/admin');
console.log($location.path());
}else{
$scope.msgText='error';
}
}
}]);
Service.js
var serviceFn = {
'getLoginData':getLoginData
};
return serviceFn;
function getLoginData(loginInfo,success){
var data= true;
var d = $q.defer();
//return success(data);
dojo.xhrPost({
url:"/xxx?sign_in_mail="+loginInfo.userName+"&sign_in_pwd="+loginInfo.passWord,
handleAs: "json"
}).then(function(res){
d.resolve(res.items);
if(res.items == "Success"){
console.log(res.items+"////from service");
data = true;
}else{
data = false
console.log(res.items);
}
}).then(function(){
return success(data)
});
}
}]);
答案 0 :(得分:0)
如果你肯定想使用超出角度的服务,请使用$ scope。$ digest()命令,这样angularjs就会知道何时检查变量是否有变化,因此,更新UI。
var loginSuccess = function(data){
console.log('loginSuccess works//'+data);
if(data){
$location.path('/admin');
console.log($location.path());
}else{
$scope.msgText='error';
}
$scope.$digest(); // "Hey, AngularJS, check the variables, you know..."
}
答案 1 :(得分:0)
var loginSuccess = function(data){
console.log('loginSuccess works//'+data);
$scope.$apply(function(){
if(data){
$location.path('/admin');
console.log($location.path());
$scope.status = true;
}else{
$scope.msgText='error';
}
});
};
谢谢大家,解决方案如上所述。