存储在服务Angular 1中的API请求

时间:2017-06-17 08:42:08

标签: angularjs http

我有一个名为DashboardCtrl的父控制器应用程序,以及多个子控制器(DashboardBuyerCtrl,DashboardSellerCtrl ...)

我希望能够在不同的控制器之间共享HTTP请求的结果。 目前,我在每个控制器中执行我的HTTP请求,但我认为这不是理想的性能。 我读过我应该使用服务,但我已经被困在这里了。

任何人都可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

通常,使用服务是一种很好的做法,因为它可以帮助您在整个应用程序中组织和共享代码,我创建了一个小应用程序来展示如何在控制器中创建和重用服务:

var app = angular.module('testApp', []);

app.controller('ctrlA', function($scope, getIp) {
  getIp().then(function(resp) {
    $scope.data = resp.data.origin;
  });
});

app.controller('ctrlB', function($scope, getIp) {
  getIp().then(function(resp) {
    $scope.data = resp.data.origin;
  });
});

app.service('getIp', function($http) {
  return function() {
    return $http.get('https://httpbin.org/ip');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp">
  <div ng-controller="ctrlA">
    First controller
    <p>IP: {{data}}</p>
  </div>
  <div ng-controller="ctrlB">
    Second controller
    <p>IP: {{data}}</p>
  </div>
</div>

关于性能,如果内容没有经常更新(或根本没有更新),我建议使用caching选项,如下所示:

$http({
  url: '...',
  method: 'GET',
  cache: true
});

这将保存请求的响应以供将来使用。

您可以在official documentation中了解有关服务的更多信息。