Angularjs 我做错了
我正试图为我的网站写一个工厂 所以我写了这个:Angularjs 我做错了,angularjs,Angularjs,我正试图为我的网站写一个工厂 所以我写了这个: mod.factory('AccountService', function($http) { var service = {}; var onError = function(response) { if (response == '') { return ['Timeout Occured !']; } var errors = []; for (var key in response.Mode
mod.factory('AccountService', function($http) {
var service = {};
var onError = function(response) {
if (response == '') {
return ['Timeout Occured !'];
}
var errors = [];
for (var key in response.ModelState) {
for (var i = 0; i < response.ModelState[key].length; i++) {
errors.push(response.ModelState[key][i]);
}
}
return errors;
};
var onSuccess = function(response) {
return true;
}
service.Login = function(credentials) {
$http.put('http://localhost:9239/Api/Account/', credentials).success(function(data) {
return onSuccess(response);
}).error(function (response) {
return onError(response);
});
};
return service;
当我登录时,会调用Login方法。但是,$http中的Success或Error方法被调用,它不返回onSuccess或onError函数
我想我犯了一些错误,是吗?有几件事,
$http
承诺没有成功
或错误
回调,而是成功
和错误
。在您的服务中,您没有返回$http
承诺,然后您对其调用success
和error
,当然它不会工作$http
调用,很像任何地方的Ajax调用都是异步进行的,这意味着您不能简单地在成功/错误回调中返回一个值,但是您可以返回一个承诺:
service.Login = function(credentials) {
return $http.put('http://localhost:9239/Api/Account/', credentials)
};
在您的控制器中,您可以像这样使用:
AccountService.Login($scope.credentials).then(function(data) {//success callback
$window.sessionStorage.setItem('loginToken', data.SuccessMessages[0]);
if (data.SuccessMessages[1] != '') {
$window.sessionStorage.setItem('groupId', data.SuccessMessages[1]);
}
$scope.isLoading = false;
$location.path('/Home');
},function(errors) {//error callback
$scope.Errors.push(errors);
$scope.isLoading = false;
})
当您调用承诺时,它将在承诺解析时执行,第一个函数是成功回调,第二个函数是错误回调
AccountService.Login($scope.credentials).then(function(data) {//success callback
$window.sessionStorage.setItem('loginToken', data.SuccessMessages[0]);
if (data.SuccessMessages[1] != '') {
$window.sessionStorage.setItem('groupId', data.SuccessMessages[1]);
}
$scope.isLoading = false;
$location.path('/Home');
},function(errors) {//error callback
$scope.Errors.push(errors);
$scope.isLoading = false;
})