我有几个控制器从服务调用方法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%的时间?)。
所以,通过缓存结果,至少我得到了一致的结果,这意味着在这种情况下光滑角度的东西不能正常工作(从不),我必须在其他地方寻找解决方案。
答案 0 :(得分:0)
Angular $ http有一个内置缓存,你可以在这里使用它。您可以缓存所有$ http请求,这可能是一个坏主意,或特定的。
在一个非常简单的层面上,这应该适合你
quizService.getData = function() {
return $http.get('quiz.json', {cache: true}).then(quizData => {
return quizData;
});
};
中找到更多信息