我有 2 个 Controller - ParentCtrl
和 ChildCtrl
。
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
他们使用相同的服务方法来获取数据。数据被缓存(使用 $http
服务的 cache:true
参数)。
angular.module('myApp')
.factory("myService", [
'$http',
function $http) {
return {
getMyData: function () {
return $http.get(url, {cache: true}).then(function (response) {
return data = response.
});
所以问题是这两个 Controller 开始同时工作 - 这意味着 myService#getMyData
方法可以被调用两次,即到服务器的 2 次往返。但我只想要一次往返,因此 ChildCtrl
将从缓存中获取结果。
如何解决这个问题?
谢谢
最佳答案
我不会做一些同步结构,而是将其作为预取数据(viewModel)添加到路由中:
$routeProvider
.when('/', {
templateUrl: 'index.html',
controller: homeController,
caseInsensitiveMatch: true,
resolve: {
sharedData: function($http, myService) {
var sharedPromise = myService.getMyData().then(function(results) {
return results;
});
}
}
});
然后在您的 Controller 中,至少在根目录中,您可以引用共享数据,就像引用服务一样:
function homeController($scope, $http, sharedData) {}
请原谅伪代码,但它至少可以保证引用数据被获取一次。
关于javascript - AngularJS。使用缓存时防止两次加载 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505614/