![](/img/trans.png)
[英]Angular js controller design passing data of http post response to another controller
[英]Angular 1.5 - passing http post response to controller
我正在尝试将HTTP响应从我的控制器传递到服务,除了将响应发送到控制器外,它的运行效果很好,这是下面的代码:
为我服务
app.factory('ApiService',function($http,Config,$q){ return { login: function(payload,callBack){ var deferred = $q.defer(); $http({ method:'POST', url:Config.baseUrl + '/api/login', data:payload, headers: {'Content-Type': 'application/json'}, }).then(function successCallback(callBack){ console.log(callBack); return deferred.resolve(callBack); }, function errorCallback(callBack){ //deferred.reject(error); console.log(callBack); return deferred.reject(callBack); }); return deferred.promise; } } });
对于控制器
app.controller('LoginCtrl', function($scope,$position,$rootScope,$state,ApiService) { $scope.forms = { 'loginForm':'' } var payload ={ 'username':'', 'password':'' } $scope.userLogin = function(form){ $scope.username = form.username.$modelValue; $scope.password = form.password.$modelValue; payload ={ "username":$scope.username, "password":$scope.password } ApiService.login(payload, function(result){ console.log(result); } });
现在我不明白,因为当我使用console.log()
响应时,我可以在服务中看到它,但是在控制器上做同样的事情,却一无所获。
无需使其复杂。 只需从factory
退回承诺并在controller.
使用它即可controller.
厂:
app.factory('ApiService',function($http,Config,$q) {
return {
login: function(payload) {
return $http({
method:'POST',
url:Config.baseUrl + '/api/login',
data:payload,
headers: {'Content-Type': 'application/json'},
});
}
}
});
在控制器中:
ApiService.login(payload).then(function(data){
// use response data
}, function(error) {
// handle error
});
您应该这样使用它:
ApiService.login(payload).then(function(result){
console.log(result);
});
因为您在服务中返回了承诺。 同样,您也不需要该回调参数,因为promise上的then
方法是完成时的回调,您可以使用其解析数据。
app.factory('ApiService',function($http,Config,$q){
return {
login: function(payload){
var deferred = $q.defer();
$http({
method:'POST',
url:Config.baseUrl + '/api/login',
data:payload,
headers: {'Content-Type': 'application/json'},
}).then(function (result){
return deferred.resolve(result);
}, function (result){
return deferred.reject(result);
});
return deferred.promise;
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.