2016-11-04 50 views
2

我正在一個任務,我有一堆儀表板上的小部件。當用戶更改儀表板上的客戶時,$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

回答