2016-11-04 13 views
2

ダッシュボードにウィジェットがたくさんある作業をしています。ユーザーがダッシュボードで顧客を変更すると、$stateが再ロードされ、ウィジェットの位置をキャッシュに保存する必要がありますが、ウィジェットに関連するデータを更新する必要があります。関連するコンポーネントには、顧客が変更されたヘッダコンポーネントと、ウィジェットがあるダッシュボードコンポーネントの2つがあります。私はヘッダーコンポーネントに触れることなくこれを達成したいと思います。キャッシュ内のデータをリフレッシュする方法reload-angular 1.5/ui-router

以前は、キャッシュに保存した後にすべてのデータ関連のプロパティをキャッシュから削除する機能を書いていましたが、それは適切なアプローチではないかもしれないと思います。これを達成する最善の方法は何ですか?

ので、各ウィジェットは次のようになりますとします

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

これは、ダッシュボードのコントローラに$ctrl.widgetsを公開する私のルート・ファイル内の$resolve「D機能である:私は保存

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

状態の解決機能を使用して、必要なデータを再フェッチできます。 https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c#.3qi1jjy7d – Sagar

答えて

関連する問題