使用Angular检索JSON数据的最佳方式是什么?

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"
            }
        ]
    }
}

但是我也有每个id的数据分别存储在单独的json文件中。这些数据大部分时间都是不变的,但会经常被访问。我知道如何编写代码来访问这两种数据。但我困惑的是哪种方式访问数据更好、更快速。

为了更快的访问 - 使用本地存储。 - Nikhil Aggarwal
1
通过使用服务,仅从文件中获取数据一次并在整个程序中维护它。这是您可以采取的最佳方法。 - simon
谢谢@simon。我了解了这些服务,它们非常有用。 - Baradwaj Aryasomayajula
1个回答

2

您可以采用的一种方法是将服务注入到控制器中,并拥有一个返回此数据的promise函数。这样做是有优势的,因为您可以在整个应用中注入和复用此服务,并且还可以对响应进行缓存以提高性能。下面是一个示例实现...

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链接 - 演示

唯一需要注意的是调用.then时,由于这是一个异步调用。


另一种方法是,如果假设这个“常量”数据是一些配置数据,您希望在稍后的控制器中获取此数据而不解析异步承诺,则可以手动引导应用程序,在最初检索此数据后提供方便,以确保您将首先获得此数据。

为此,请创建一个名为dataAngularJS常量

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链接 - 演示 - 常量

非常有用。非常感谢。 - Baradwaj Aryasomayajula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接