javascript - AngularJS。使用缓存时防止两次加载 JSON 数据

标签 javascript angularjs

我有 2 个 Controller - ParentCtrlChildCtrl

<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/

相关文章:

javascript - javascript中函数没有得到预期的返回值

html - 具有 Material 设计 md-menu-item 垂直问题的 Angularjs

javascript - 如何使用 Angular-strap 的 onBeforeShow() 将 css 样式应用于 Popover

javascript - 有没有办法使用ajax水平对齐动态卡?

javascript - Konva - 清除图层但保留背景

javascript - Onenote API,从 JavaScript 进行 PATCH 时出现奇怪的行为

angularjs - Angular.js $compile 返回 html 数组但不是实际的 html

javascript - 如何在 Angular ui 路由器上转换到另一个模式后关闭模式

javascript - 在事件内使用 $scope - 谷歌地图 api

javascript - 使用 js 库补间 dom 对象时操作的最佳属性