如何在状态刷新缓存中刷新数据 - 角度1.5/UI路由器

问题描述:

我正在一个任务,我有一堆仪表板上的小部件。当用户更改仪表板上的客户时,$state将被重新加载,并且应将小部件的位置保存到缓存中,但应该刷新与小部件相关的数据。有两个相关的组件,一个客户端更改的头部组件以及这些部件所在的仪表板组件。我想在不触及标题组件的情况下完成此操作。如何在状态刷新缓存中刷新数据 - 角度1.5/UI路由器

此前,我写了一个函数,用于在保存到缓存后从缓存中删除所有与数据有关的属性,但我认为这可能不是正确的方法,也不是太复杂。完成这个的最好方法是什么?

所以假设每个插件看起来是这样的:

{ 
widgetType: chart, 
position: someCoordinatesThatStayTheSameOnStateChange, 
chart: containsDataThatNeedsToBeRefreshed, 
chartData: containsDataThatNeedsToBeRefreshed 
} 

这是我的路线文件$resolve“d功能,在仪表盘控制器暴露了一个$ctrl.widgets

widgets($http, $q, CacheFactory, WidgetsService) { 
     'ngInject'; 
     let mockWidgetData = WidgetsService.getAllWidgets(); 
     let widgetsCache = CacheFactory.get('widgets'); 
     if (!widgetsCache) { 
     CacheFactory.createCache('widgets', { 
      storageMode: 'localStorage', 
     }); 
     } 
     return mockWidgetData; 
    }, 

相关的地方,我救数据在仪表板控制器的缓存中:

let widgetsCache = CacheFactory.get('widgets'); 
    let widgetsCacheItems = widgetsCache.get('widgets'); 

    gridsterConfig.resizable.stop = function(event, $element, widget) { 
    widgetsCache.put("widgets", $ctrl.widgets); 
    //clearDataFromCache() 
    } 
    gridsterConfig.draggable.stop = function(event, $element, widget) { 
    widgetsCache.put("widgets", $ctrl.widgets); 
    //clearDataFromCache() 
    } 
    $ctrl.toggleVisibility = function(widget) { 
    widget.hidden = !widget.hidden; 
    widgetsCache.put("widgets", $ctrl.widgets); 
    //clearDataFromCache() 
    } 

老功能我写道:

function clearDataFromCache() { 
     let widgetObjectsInCache = widgetsCache.get('widgets'); 
     widgetObjectsInCache.forEach((widget) => { 
      if (widget.chart) delete widget.chart; 
      if (widget.chartConfig) delete widget.chartConfig; 
     }) 
     console.log(widgetObjectsInCache, "THE CACHE AFTER REMOVING ANY DATA RELATED STUFF"); 
     } 
+0

你真的想删除$ state reload上的数据(我假设它刷新了相同的状态)还是你想重新获取数据? – Sagar

+0

我认为重新获取数据更有意义,但唯一需要重新获取的数据是图表 – devdropper87

+0

您可以使用resolve函数获取状态以重新获取所需的数据。请检查https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c#.3qi1jjy7d – Sagar

可以使用解析功能的状态,以重新获取你想要的数据。请检查https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c?swoff=true#.bkudisx52