2015-06-14 54 views
3

我有我分开,就像下面这是使用检索JSON数据的最佳方式角

{ 
    "Id": { 
     "1": [ 
      { 
       "Item1": "Item One", 
       "Item2": "Item Two", 
       "Item3": "Item Three" 
      } 
     ], 
     "2": [ 
      { 
       "Item1": "Item One", 
       "Item2": "Item Two", 
       "Item3": "Item Three" 
      } 
     ], 
     "3": [ 
      { 
       "Item1": "Item One", 
       "Item2": "Item Two", 
       "Item3": "Item Three" 
      } 
     ] 
    } 
} 

的JSON结构数据,但我也有在每个ID单独的JSON文件中的数据。而且大部分时间数据都将保持不变。但它会频繁访问。

我知道如何编写代码以上述方式访问数据。但是我感到困惑的是访问数据的方式会更好,更快。

+0

进行快速访问 - 使用本地存储 – nikhil

+1

从文件中获取你的数据只有一次,并通过使用服务维护它的程序。这是你可以采取的最好的方法。 – simon

+0

谢谢@simon。我了解了这些服务,他们非常有用。 –

回答

2

你可以采取的一种方法是向服务器注入一个服务器,该服务器将有一个函数返回这个数据的承诺。这是有利的,因为您可以在“应用程序范围内”注入并重新使用此服务,并且还可以缓存性能响应。下面是一个例子实施...

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

app.service('DataService', ['$http', function ($http) { 
    this.getData = function(){ 
     return $http.get('data.json', { cache: true }) 
    } 
}]); 

app.controller('ctrl', ['$scope', 'DataService', function($scope, DataService) { 
    DataService.getData().then(function(response) { 
     console.log(response.data); 
    }); 
}]); 

Plunker Link - 演示

要留神,如果是一个异步调用,因为此调用.then的唯一的事。


另一种方法可以做到这一点,这是在这里做一些假设,可能包括以下情形:假设这个“不变”的数据是像一些配置数据,并希望得到你的手在这个无稍后解决控制器中的异步承诺。您可以在最初检索这些数据后手动引导您的应用程序,并提供便利知道您将预先获得此数据。

要做到这一点,让我们创建一个名为AngularJS constantdata

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

(function() { 
    var initInjector = angular.injector(['ng']); 
    var $http = initInjector.get('$http'); 
    $http.get('data.json').then(
    function (response) { 

     app.constant('data', response.data); 

     angular.element(document).ready(function() { 
      angular.bootstrap(document, ['app']); 
     }); 
    } 
); 
}()); 

app.controller('ctrl', ['$scope', 'data', function($scope, data) { 
    console.log(data) 
}]); 

你可以看到这个被简化,至少在我们的控制水平。我们只是注入data作为依赖关系,其中已经已经为我们解决了我们的$http.get()

Plunker Link - 演示 - 常数

+0

非常有用。非常感谢你。 –