如何使用Angular处理JSON文件加载

时间:2016-03-01 11:07:23

标签: javascript angularjs json http

我有几个控制器从服务调用方法getData()。 为了不为同一个json文件做额外的http调用,我使用这样的东西:

QuizApp.service('quizService', ['$http', function($http) {
    var quizService = {},
        quizData;

    quizService.getData = function() {
        return quizData ? quizData : quizData = $http.get('quiz.json');
    };

    return quizService;
}]);

...但是,如果我这样做,事情就不能正常工作(数据用于填充滑块和带有角度光滑的缩略图库,并且会出现一些问题。现在它可能没有&#39无所谓,我只是想知道上面的代码是否有意义。)

另一方面,如果我这样写getData()

QuizApp.service('quizService', ['$http', function($http) {
    var quizService = {},
        quizData;

    quizService.getData = function() {
        quizData = $http.get('quiz.json');
        return quizData;
    };

    return quizService;
}]);

...将为同一个json文件执行各种http请求(对我来说看起来不是一个好习惯),一切正常,光滑的角度图库正常工作。但不是百分之百的时间:一些随机的东西也不能很好地工作(相同的症状。我可能会再次描述它们,但我不认为这是重点)

因此,一般而言,无论上下文如何,getData()中哪一个版本看起来不错,哪些不是?为什么?

更新

正如Mark指出的那样,Angular有一个内置缓存,但默认情况下它设置为false。 Here是一个帖子,here是文档。

如果我缓存了http请求的结果,虽然我遇到了同样的问题(我在这里没有描述它),我得到了第二个选项,它显然与此无关。

实际上,似乎如果我重复两次http请求(就像在我的第二段代码中),事情是偶然的(90%的时间?)。

所以,通过缓存结果,至少我得到了一致的结果,这意味着在这种情况下光滑角度的东西不能正常工作(从不),我必须在其他地方寻找解决方案。

1 个答案:

答案 0 :(得分:0)

Angular $ http有一个内置缓存,你可以在这里使用它。您可以缓存所有$ http请求,这可能是一个坏主意,或特定的。

在一个非常简单的层面上,这应该适合你

quizService.getData = function() {
  return $http.get('quiz.json', {cache: true}).then(quizData => {
    return quizData;
  });
};

您可以在Angular docs for $http

中找到更多信息