简体   繁体   English

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

[英]Angular 1.5 - passing http post response to controller

I am trying to pass an http response from my controller to a service, it works well except for getting the response to go into the controller here is my code below: 我正在尝试将HTTP响应从我的控制器传递到服务,除了将响应发送到控制器外,它的运行效果很好,这是下面的代码:

For my service 为我服务

 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; } } }); 

and for the Controller 对于控制器

 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); } }); 

Now I don't understand because when I console.log() the response I'm able to see it in the service but doing the same on the controller I'm getting nothing. 现在我不明白,因为当我使用console.log()响应时,我可以在服务中看到它,但是在控制器上做同样的事情,却一无所获。

No need to make it complex. 无需使其复杂。 Simply return promise from factory and use it in controller. 只需从factory退回承诺并在controller.使用它即可controller.

factory: 厂:

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'},
              });
          }
        }
    });

in controller : 在控制器中:

 ApiService.login(payload).then(function(data){
      // use response data    
   }, function(error) {
      // handle error
 });

You should use it like this: 您应该这样使用它:

 ApiService.login(payload).then(function(result){
    console.log(result);
  });

Because you are returning a promise in your service. 因为您在服务中返回了承诺。 Also you don't need that callback parameter, because the then method on the promise is your callback when it finishes and you can access the data your resolve it with. 同样,您也不需要该回调参数,因为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