0

我正在使用 Meteor + AngularJS 框架。

我想根据离线集合中存储的数据(使用ground:db)来控制路由,但不能保证离线数据在路由之前准备好。

如果集合不离线,似乎有一些方法像“waitOn”或“subscriptionReady”值得研究,但离线集合不需要订阅或发布,我如何确保它们在路由之前或应用程序启动之前准备好?

关键来源片段:

1.route.js

import { LastLogin } from '../lib/collections';

angular.module('app')
    .config(function ($stateProvider, $urlRouterProvider) {
            console.log(LastLogin.find().count());
            if(LastLogin.find().count() > 0){
                $urlRouterProvider.otherwise('main/homepage');
            }else{
                $urlRouterProvider.otherwise('login');
            }
        });

2.collections.js

export const LastLogin = new Ground.Collection('lastLogin', {connection: null});

大多数情况下,LastLogin.find().count() 为0,很少会为1,实际上lastLogin 集合中有几条记录可以在登录页面显示后正确打印出来,那就太迟了我。

我尝试通过 Tracker.autorun 附上以下代码

Tracker.autorun(function(){
    if(LastLogin.find().count() > 0){
        $urlRouterProvider.otherwise('main/home');
    }else{
        $urlRouterProvider.otherwise('login');
    }
});

但没有帮助。

我的最终目的是让最后一个用户自动登录,即使处于离线状态。有更好的解决方案吗?

4

1 回答 1

0

最后我自己解决了。这个想法是ground:db有一个“加载”事件,记录在这里:https ://github.com/GroundMeteor/db/blob/grounddb-caching-2016/EVENTS.md ,我几天前看过这个文档但没有t 立即猜出用法。

来源(app.js):

// Startup
if (Meteor.isCordova) {
    angular.element(document).on('deviceready', onReady);
}else {
    angular.element(document).ready(onReady);
}

function onReady() {
    Ground.on('loaded', function (ret) {
        if(ret.collection == 'lastLogin'){
            angular.bootstrap(document, ['app']);
        }
    });
}
于 2016-09-24T16:48:50.723 回答