繁体   English   中英

Angular 1.5-将HTTP发布响应传递给控制器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM