我有一个使用angular和JS-Data的离子应用程序,当在移动设备上运行时,应该从下载的JSON文件加载数据。
我将文件与www文件夹中的应用程序捆绑在一起,并根据设备类型复制到相关的存储文件夹中。复制文件后,如果有互联网连接,应用程序会尝试从CDN获取最新数据,将新数据保存在JSON文件中,并将新数据从JSON文件读入JS-Data,以便向用户显示新数据
这一切都有效,除了文件保存后的位和用户显示新数据,它们显示旧的缓存数据。在保存到文件之前记录数据显示正确的数据,使用$ cordovaFile加载文件显示正确的数据,文件的路径是正确的,所有调试都指向JS-Data第二次正确获取数据。
appData
.loadData (basePath)
.then (() => {
assetsFactory
.backgroundUpdate ()
.then (basePath => appData.loadData (basePath, true))
})
其中basePath是存储文件的文件夹的绝对链接,然后是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(areas)显示文件中的旧数据,但使用上面的确切代码,如果我将basePath变量更改为获取新远程数据的链接,则console.log(区域)显示新的更新数据。
我有什么想法,我没有绕过缓存吗?
答案 0 :(得分: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中显示新数据的唯一方法,但确定有一个更优雅的解决方案