将数据从控制器存储到angularjs中的服务

时间:2017-09-06 08:09:59

标签: angularjs api angular-services angular-controller

虽然关于这个问题有很多问题,但我无法弄明白,如何继续进行。

我是AngularJS的新手。我想在控制器中传递来自API的数据并将其传递给另一个函数。为此,我知道我必须创建服务。但是在进入这个代码扩展之后我无法理解它,如何将它存储在Service中并将其传递给其他Controller或同一Controller内的函数。我是制作服务的新手。

控制器:

 $scope.GetR = function (){           

             $scope.X = null;
             $scope.Y = null;

        $http({method: 'POST', url: 'http://44.43.3.3/api/infotwo', 
                          headers: {"Content-Type": "application/json"}, 
                          data: $scope.ResponseJson 
          })
        .success(function(data, status, headers, config) {
             $scope.X = data.X;
             $scope.Y = data.Y;
            //console.log($scope.X+"and"+$scope.Y);

             //Seding RS to API to get AAs 
                        $scope.RJson = {
                            "ICl": $scope.ICl,
                            "RS":  $scope.X
                        };

                        $http({method: 'POST', url: 'http://44.128.44.5/api/apithree', 
                                  headers: {"Content-Type": "application/json"}, 
                                  data: $scope.RJson 
                              })
                            .success(function(data, status, headers, config) {
                                 $scope.At = data;
                                 $scope.Eq = data.AA.Eq;
                                 $scope.FIn = data.AA.FIn;
                                 $scope.MM = data.AA.MM;


                                console.log("Eq:"+$scope.Eq+"       FIn:"+$scope.FIn+"       MM:"+$scope.MM);
                            }).error(function(data, status, headers, config) {   
                                console.log("API failed...");
                            }); 

        }).error(function(data, status, headers, config) {   
            console.log("Something went wrong...");
        }); 

   };

现在我想将此数据传递给Service,以便我可以在其他API输入上调用此输出

.success(function(data, status, headers, config) {
                                 $scope.At = data;
                                 $scope.Eq = data.AA.Eq;
                                 $scope.FIn = data.AA.FIn;
                                 $scope.MM = data.AA.MM;

                                console.log("Eq:"+$scope.Eq+"       FIn:"+$scope.FIn+"       MM:"+$scope.MM);

2 个答案:

答案 0 :(得分:1)

这显示了如何创建<MKLocalSearchCompletion 0x60000105f350> New England Aquarium (1 Central Wharf, Boston, MA 02110-3309, United States) <MKLocalSearchCompletion 0x6000012412f0> New England Lobster Market & Eatery (824 Cowan Rd, Burlingame, CA 94010, United States) <MKLocalSearchCompletion 0x600001240f00> England-Idlewild Park and Dog Park (5550 Idlewild Rd, Burlington, KY 41005, United States) <MKLocalSearchCompletion 0x60000105ecc0> Best Western Plus New Englander (1 Rainin Rd, Woburn, MA 01801, United States) <MKLocalSearchCompletion 0x6000008408a0> Melbourne Grammar School - Wadhurst Campus (355 St Kilda Road, St Kilda Road VIC 3004, Australia) 并在两个service之间共享数据。

服务:

controllers

第一个控制器:

(function() {
    'use strict';

    angular
        .module('myAppName') // Replace this to your module name
        .service('MyService', MyService);

    MyService.$inject = [];

    function MyService() {
        this.data = null;
    }
})();

第二控制器:

(function() {
    'use strict';

    angular
    .module('myAppName') // Replace this to your module name
        .controller('MyFirstController', MyFirstController);

    MyFirstController.$inject = ['MyService', '$http'];
    function MyFirstController(MyService, $http) {
        var vm = this;
        vm.data = MyService.data;

        $http.post('/someUrl', whatEverData).then(resp=> {
            MyService.data = resp.data;
        })

    }
})();

答案 1 :(得分:0)

不确定这是否是您要找的。下面的代码未经过测试(可能有语法错误)

<强>服务

function() {
  'use strict';

  angular
    .module('myAppName')
    .factory('MyService', MyService);

  MyService.$inject = [];

  function MyService() {
    var data = null;
    return {
      getData: function() {
        return data;
      },
      setData: function(d) {
        data = d;
      }
    }
  }
})();

<强>控制器:

(function() {
  'use strict';

  angular
    .module('myAppName')
    .factory('controller', controller);

  controller.$inject = ['$scope', '$http', 'MyService'];

  function controller($scope, $http, MyService) {
    $scope.GetR = function() {

      $scope.X = null;
      $scope.Y = null;

      var promise = $http({
        method: 'POST',
        url: 'http://44.43.3.3/api/infotwo',
        headers: {
          "Content-Type": "application/json"
        },
        data: $scope.ResponseJson
      });

      promise.success(function(data, status, headers, config) {
        $scope.X = data.X;
        $scope.Y = data.Y;
        //console.log($scope.X+"and"+$scope.Y);

        //Seding RS to API to get AAs 
        $scope.RJson = {
          "ICl": $scope.ICl,
          "RS": $scope.X
        };

      }).error(function(data, status, headers, config) {
        console.log("Something went wrong...");
      });

      return promise;
    };

    $scope.sendRS = function() {
      var promise = $http({
        method: 'POST',
        url: 'http://44.128.44.5/api/apithree',
        headers: {
          "Content-Type": "application/json"
        },
        data: $scope.RJson
      });

      promise.success(function(data, status, headers, config) {
        $scope.At = data;
        $scope.Eq = data.AA.Eq;
        $scope.FIn = data.AA.FIn;
        $scope.MM = data.AA.MM;

        console.log("Eq:" + $scope.Eq + "       FIn:" + $scope.FIn + "       MM:" + $scope.MM);
      }).error(function(data, status, headers, config) {
        console.log("API failed...");
      });
      return promise;
    }

    var init = function() {
      $scope.GetR().then(function() {
        $scope.sendRS().then(function(data) {
          MyService.setData({
            At: data,
            Eq: data.AA.Eq,
            FIn: data.AA.FIn,
            MM: data.AA.MM
          });
        })
      })
    }

    init();
  }
})();

其他控制器

(function() {
  'use strict';

  angular
    .module('myAppName')
    .controller('controller1', controller1);

  controller1.$inject = ['$scope', 'MyService'];

  function controller1($scope, MyService) {
    $scope.data = MyService.getData();
  }
})();