Как убедиться, что местная коллекция метеоров готова перед отправкой

Я использую Meteor + AngularJS Framework.

Я хочу контролировать маршрутизацию в соответствии с тем, какие данные хранятся в автономной коллекции (используя 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');
    }
});

но не поможет

Моя последняя цель - чтобы последний пользователь автоматически вошел в систему, даже в автономном режиме. Есть ли лучшие решения?

1 ответ

Наконец я решил это сам. Идея основна: у db есть "загруженное" событие, которое задокументировано здесь: https://github.com/GroundMeteor/db/blob/grounddb-caching-2016/EVENTS.md, я видел этот документ несколько дней назад, но не не могу сразу догадаться об использовании.

Источник (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']);
        }
    });
}
Другие вопросы по тегам