在服务器上获取json而不是在控制器上

时间:2016-12-09 05:00:19

标签: angularjs json

是否可以在服务上获取数据json,目前我在我的productdetail控制器上使用它。第二,当我打开我的产品列表页面时,它会请求json。当我转到详细产品页面时,再次请求json。我认为它只需要一次请求。如果那样,为什么我必须多次请求相同的json。有没有办法要求json一次?

services.js

.factory('Product', ['$http', function($http){
        return{
            get: function(callback){
                return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){
                    return response.data;
                });
            }
        };
    }])

productctrl

angular
    .module('app')
    .controller('productCtrl',['$scope', 'Product', function($scope,Product) {
        $scope.title="List Product";
        Product.get().then(function(data) {
            $scope.products = data;
        });
    }]);

productdetailctrl

.controller('productDetailsCtrl',['$scope','$stateParams', 'Product', function($scope,$stateParams,Product){
        $scope.id=$stateParams.id;
        Product.get().then(function(data) {
            $scope.singleItem = data.filter(function(entry){
                return entry.id === $scope.id;
            })[0];
            // console.log($scope.singleItem);
            // console.log($stateParams);
        });     
}]);

1 个答案:

答案 0 :(得分:0)

获取后缓存json。如果缓存,则从缓存中返回else fetch。

.factory('Product', ['$http', function($http,$q){
    var service = {};
    service.get: function(callback){
         if(service.productJSON){
            return $q(function(resolve,reject){
              resolve(service.productJSON);
          })
        }
        else{
            return $http.get('https://raw.githubusercontent.com/vicariosinaga/learn/master/products.json').then(function(response){
                service.productJSON = 
                return response.data;
            });
        }
      }
    return service;

}])