簡體   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