如何使用 Angular 处理 JSON 文件加载
how to handle JSON file loading with Angular
我有几个控制器可以从服务调用方法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;
}]);
。但是如果我这样做,事情就无法正常工作(数据用于用棱角光滑填充滑块和缩略图库,并且会出现一些问题。现在可能没关系,我只想知道上面的代码是否有意义)。
另一方面,如果我这样写getData()
:
QuizApp.service('quizService', ['$http', function($http) {
var quizService = {},
quizData;
quizService.getData = function() {
quizData = $http.get('quiz.json');
return quizData;
};
return quizService;
}]);
。这将对同一个 JSON 文件执行各种 http 请求(对我来说看起来不是一个好的做法),一切正常,光滑的角度画廊工作正常。但不是100%的时间:随机的事情也不能很好地工作(相同的症状。我可能会描述它们,但同样,我认为这不是这里的重点)
所以,一般来说,无论上下文如何,这些版本的getData()
中哪一个看起来不错,哪个不好,为什么?
更新
正如Mark指出的那样,Angular有一个内置的缓存,但默认情况下它被设置为false。这是一篇文章,这是文档。
如果我缓存 http 请求的结果,尽管我遇到了同样的问题(我在这里没有描述它),我得到了第二个选项,这显然与此无关。
实际上,似乎如果我重复 http 请求两次(如我的第二段代码),事情就会偶然工作(90% 的时间?
因此,通过缓存结果,至少我得到了一致的结果,这意味着在这种情况下,光滑的角度将无法正常工作(永远不会),我必须在其他地方寻找解决方案。
Angular $http有一个内置的缓存,你可以在这里使用它。您可以缓存所有$http请求,这可能是一个坏主意,或者特定的请求。
在非常简单的层面上,这应该适合您
quizService.getData = function() {
return $http.get('quiz.json', {cache: true}).then(quizData => {
return quizData;
});
};
您可以在 Angular 文档中找到更多信息$http
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- Ajax文件加载和<输入>文件加载
- 使用Bootstrap将JSON文件加载到表中
- 将组合JSON文件加载到谷歌地图
- 将文本文件加载到javascript中
- jQuery Mobile样式从另一个文件加载内容
- 使用JavaScript将压缩文本文件加载到字符串中
- 数组在手动写入时有效,但从文本文件加载时无效
- 如何在打印前等待javascript文件加载twitter,并在打印后关闭选项卡
- 从文本文件加载jsondata时出现空白页
- AngularJS:如何使用ng-include将javascript文件加载到部分中
- 使用jquery将html文件加载到html中,用于离线/本地项目
- 从另一个grunt文件加载grunt任务
- 将php文件加载到弹出窗口中,并将php变量发布到该弹出窗口中(使用onclick)
- 如何使用node.js将不同的json文件加载到不同的json对象中
- 将变量从服务器上的外部文件加载到 HTML 文档中
- 节点 - 将 JSON 文件加载到代码中
- 如何使用 JavaScript/jQuery 将 XML 文件加载到 JSP/HTML 页面
- NodeJS和ExpressJS-Javascript文件加载,但CSS文件不加载;t
- D3.js:通过Force Layout从JSON文件加载多个网络