2016-09-23 3 views
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は()(カウント)が0であることはめったにありませんが、実際にはlastLoginコレクションにいくつかのレコードがあり、ログインページが表示された後に正しく表示されます。

私はTracker.autorun

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

しかし、誰の助けによって、次のコードを囲む試してみました。

最終的な目的は、最後のユーザーがオフライン状態でも自動的にログオンすることです。より良い解決策はありますか?

答えて

0

最後に私は自分でそれを試しました。アイデアは根拠があります: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']); 
     } 
    }); 
} 
関連する問題