Angulajs:在没有第二次加载的情况下与所有页面共享http响应

时间:2015-07-23 13:27:13

标签: angularjs http

我希望这个帖子能让每个人都健康。

我的应用有两页,我在两个页面都使用相同的控制器。

我在页面加载时正在做十几个http请求,并与两个页面共享数据。但每次我访问其中一个页面时,所有的http请求都会再次发送到服务器。 如何只请求服务器一次并在页面之间共享数据。

我尝试为其中一个http请求创建一个工厂,但每次访问其中一个页面时仍会发送请求。

我的代码:

App.controller('mainController', function ($scope, translation) {

//methos 1
     $http.get('types/').
        success(function (data, status, headers, config) {
            $scope.types = data;
        });

//methos 2
  translation.list(function(tr) {
        $scope.trans = tr;
  });

}

App.factory('translation', function ($http) {
  return {
    list: function (callback) {
        $http.get('trans/').success(callback);
    }
};

});

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

Heres就是一个例子:

App.factory('translation', function ($http,$q) {
  var types_q = $q.defer();
  var service = {
    types: [],
    list: list
  }

  return service;

  function list() {
      if (!service.types.length) {
        console.log('fetching from server...');
        $http.get('trans/').then(function(response) {
          service.types = response.data.types;
          types_q.resolve(response);
        });
      }

      return $q.when('types_q').then(function() {
        return types_q.promise;
      });
  }
});

App.controller('mainController', function ($scope, translation) {

  $scope.loading = true;

  translation.list().then(function(response) {
    $scope.types = response.data.types;
    $scope.loading = false;
  });

});