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、私はこのドキュメントを数日前に見ましたが、'すぐに使用法を推測してください。

ソース (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 に答える