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");
}
你真的想刪除$ state reload上的數據(我假設它刷新了相同的狀態)還是你想重新獲取數據? – Sagar
我認爲重新獲取數據更有意義,但唯一需要重新獲取的數據是圖表 – devdropper87
您可以使用resolve函數獲取狀態以重新獲取所需的數據。請檢查https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c#.3qi1jjy7d – Sagar