2016-12-07 4 views
1

MeteorアプリケーションでFlowRouterを使用しています。あるケースでは、特定の日時までリソースが利用できないため、別のルートにリダイレクトします。制限されたリソースルートがブラウザ履歴に表示されないように、制限されたリソースへのルートをリダイレクトへのパスに置き換えることができますか。そうすることで、歴史的なもの(バック、フォワードを使って)の方がUXに優しいものになります。Meteor FlowRouter:制限されたルートの履歴のパスを置き換えます。

私のようなものでFlowRouterの外側を踏んで、FlowRouterのtriggersEnterルートのためにこれを達成することができます

if(restricted) { 
    return window.location.replace(`/waitingroom/${resourceId}/user/${Meteor.userId()}`); 
} 

...しかし、これは一種の望ましくないページのリロードを引き起こします。

アイデアはありますか?

答えて

1

機能triggersEnterに渡すredirectページをリロードし、クリーンな歴史を持たずに他のページにリダイレクトするためにそれを使用することができますという名前の2番目のparamを持っている:

FR.route('/restricted-route', { 
    name: 'RestrictedRoute', 
    triggersEnter: [function(context, redirect) { 
    redirect('/replace-route'); 
    }] 
}); 

FR.route('/replace-route', { 
    name: 'ReplaceRoute', 
    action() { 
    // ... 
    } 
}); 

は私はないです

を更新しましたなぜそれが同期する必要があるのか​​確かめてください。とにかくFlowRouterナビゲーションを行うためにシーンの後ろPage.jsを使用して、あなたはredirectを使用できない場合、これは動作するはずです:

FR.route('/restricted-route', { 
    name: 'RestrictedRoute', 
    triggersEnter: [function(context, redirect) { 
    Meteor.setTimeout(() => { 
     FlowRouter._page.replace('/replace-route'); 
    }, 1000); 
    }] 
}); 

注:これはので、本番で使用する前に、慎重にそれをテストする必要があり、パブリックAPIではありません。

+0

'redirect'関数は同期型でなければならず、' triggersEnter'型では非同期操作があります。このソリューションは、私のニーズに完全に適合しません。 – asking

+0

@asking updated – Khang

+0

驚くべきことに、これはうまくいきました。実際には0ミリ秒の時間を使うことができます。内部のスクープに感謝します! – asking

関連する問題