Angular JS-Data从本地文件

时间:2016-04-21 15:02:58

标签: javascript angularjs jsdata js-data-angular

我有一个使用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(区域)显示新的更新数据。
我有什么想法,我没有绕过缓存吗?

1 个答案:

答案 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中显示新数据的唯一方法,但确定有一个更优雅的解决方案