2016-04-21 99 views
2

我有一個使用angular和JS-Data的離子應用程序,當在移動設備上運行時應該從下載的JSON文件加載數據。

我將這些文件與www文件夾中的應用程序綁定在一起,並根據設備的類型複製到相關的存儲文件夾中。一旦文件被複制,如果有互聯網連接,應用程序會嘗試從CDN獲取最新數據,將新數據保存在JSON文件中,並將新數據從JSON文件讀取到JS-Data中用戶會看到新的數據。

除保存文件之後的位以及用戶顯示新數據之外,這些全部工作,它們都顯示舊的緩存數據。在保存到文件之前註銷數據顯示正確的數據,並使用$ cordovaFile加載文件顯示正確的數據,文件路徑正確,所有調試指向JS-Data第二次正確讀取數據。Angular JS數據從本地文件加載數據

appData 
    .loadData (basePath) 
    .then (() => { 
     assetsFactory 
      .backgroundUpdate() 
      .then (basePath => appData.loadData (basePath, true)) 
    }) 

其中基本路徑是絕對鏈接到文件存儲在文件夾中,然後在loadData功能

appData.loadData = (basePath, bypassCache) => $q ((resolve, reject) => { 
    if (bypassCache === undefined) { 
     bypassCache = false 
    } 

    let options = { 
     basePath, 
     bypassCache, 
     cacheResponse : true, 
    } 
    .... 
    Area.findAll ({}, options) 
     .then (areas => { 
      console.log (areas) 
     }) 
    .... 
}) 

的console.log(區)顯示從該文件的舊數據,但使用上面的確切代碼,如果我更改basePath變量以獲得新的遠程數據的鏈接,則console.log(areas)將顯示新的更新數據。
任何想法我做錯了,我不繞過緩存?

回答

0

到目前爲止,我發現解決,這是從國家的決心調用的getData的最佳方式,

$stateProvider.state ('app', { 
    ... 
    resolve : { 
     load : (appFactory) => appFactory.getData() 
    } 
}) 

的getData最初引發了完整的backgroundUpdate功能,因爲有另一個路由器的登錄意見,我從功能的getData去除backgroundUpdate並添加到路由器的決心登錄如下

$stateProvider.state ('app.home', { 
    url : '/home', 
    abstract : true, 
    controller : 'HomeController as _home', 
    templateUrl : homeTemplate, 
    data : { 
     role : USER_ROLES.user, 
    }, 
    resolve : { 
     load : (appFactory) => appFactory.backgroundRefresh(), 
    }, 
}) 

這是我發現,實際顯示在loadData中的console.log新數據的唯一途徑,但肯定有一個更更優雅的解決方案離子