使用帖子请求中的数据

时间:2017-01-09 07:40:25

标签: angularjs post

我将两个日期传递给post方法thro controller。服务根据给定的输入回复一些数据。我使用$scope.onGetDatadata获取post method,以显示最终结果,但不会进入$scope.onGetData。所以问题是如何从服务中获取响应数据并在控制器中使用它,以便我可以在我的视图中使用它。

控制器:

        $scope.computationList;

        $scope.onViewLoaded = function () {
            computationManagementService.getComputation($scope.onGetData);
        }

        $scope.onGetData = function (data,response,error) {
            $scope.computationList = data;

        }

       $scope.calculateInput=function(start,end,htmlValidation)
       {
           var date={'startDate':start , 'endDate':end};
           if(htmlValidation){
         computationManagementService.getComputation(date,function(err,response){
           console.log("pass thro controller");
       });
    }else{
        console.log("Validation Error");
    }
    }
});

服务:

myApp.factory('computationManagementService', function($http, settings){
    var ComputationServiceFactoryObj = {};    
    var _getComputation= function(date,callback){
       $http({
           method:'POST',
           url: 'localhost:/8091/date/computation',
           data: date
       }).success(function(data,response,config){
               callback(response);
               console.log(data); // data 
           }).error(function (data, status, error, headers, config){
                       if(callback) {
                        callback(error);
                        console.log(error);
                       }
       });
    }

    ComputationServiceFactoryObj.getComputation= _getComputation;
    return ComputationServiceFactoryObj;
});

3 个答案:

答案 0 :(得分:1)

如果您尝试将post方法的数据用于视图,那么您可以尝试使用此方法它对我有用,但不确定它是否是使用该服务的正确方法。

服务:

myApp.factory('computationManagementService', 
                          function($http, $rootScope, settings){
    var ComputationServiceFactoryObj = {};   
    var _getComputation=function(callback){
               var computationData=$rootScope.finalResult;
               if(callback != null){
        callback(computationData);
    }
    } 

    var _postComputation= function(date,callback){
       $http({
           method:'POST',
           url: 'localhost:/8091/date/computation',
           data: date
       }).success(function(data){
               callback(data);
               $rootScope.finalResult=data;
               console.log(data); // data 
           }).error(function (data, status, error, headers, config){
                       if(callback) {
                        callback(error);
                        console.log(error);
                       }
       });
    }

    ComputationServiceFactoryObj.getComputation= _getComputation;
    ComputationServiceFactoryObj.postComputation= _postComputation;
    return ComputationServiceFactoryObj;
});

答案 1 :(得分:1)

一些好的做法:

  • 使用ngResource始终优于原始$http服务,除非您需要一些ngResource无法处理的复杂配置(我可以'}但是想到这样的话。为什么?它迫使你使用承诺。
  • 从您的服务方法返回promise,而不是传递回调。使用回调将迫使您在示波器上调用$digest,以便重新评估bingings,这与角度工作方式相反,并且可能也会对性能产生负面影响。

在您的情况下,我修改_getComputation方法只是返回一个承诺:

var _getComputation = function(date) {
  return $http({
    method:'POST',
    url: 'localhost:/8091/date/computation',
    data: date
  });
};

在您的控制器中:

computationManagementService.getComputation(date)
  .then(function(response) {
    console.log(response);
    $scope.someValue = response.someValue;
  }, function(error) {
    console.error(error);
  });    

我宁愿避免在控制器中注入$scope,而是使用ngController='MyController' as 'MyCtrl'语法,并将视图应该可以访问的值分配给控制器实例。

答案 2 :(得分:0)

最好不要在服务中使用.success.error方法,因为它们不可链接,请改用.then格式。最新的Angular 1.6版中不推荐.success/error个方法。

以下是Angular documentaion的Deprecation notice

在您的服务中:

var _getComputation= function(date,callback){
   return $http({
       method:'POST',
       url: 'localhost:/8091/date/computation',
       data: date
   }).success(function(data,response,config){
           callback(undefined, response);
           console.log(data); // data 
       }).error(function (data, status, error, headers, config){
                   if(callback) {
                    callback(error);
                    console.log(error);
                   }
   });
}

在您的控制器中:

computationManagementService.getComputation(date,function(err,response){
  console.log("pass thro controller");
  console.log(response);
}