私はpolymer starter kitアプリをいくつかのサブルートと、それらのルートに関連付けられたさまざまなタイプのレコードで取得しています。 URLの例は//myapp/records/{recordId}/subRoute
です。私はリロード時にアプリケーションの状態を維持したいと思います。私はそうのように試してみた:アドレスバーからポリマーファイアを使用してユーザールートを読み込む
<app-route
route="{{route}}"
pattern="/records/:recordId"
data="{{routeData}}"
tail="{{subroute}}"
></app-route>
<app-route
route="{{subroute}}"
pattern="/:page"
data="{{subRouteData}}"
></app-route>
<firebase-document
id="recordsDocument"
path="/records/[[routeData.recordId]]"
data="{{record}}"
></firebase-document>
...
<script>
routePageChanged(page) { // takes subRouteData.page
if (!user) {
set('page', 'login'),
} else if (!routeData.recordId) {
set('page', 'start')
} else {
set('page', page)
}
}
</script>
しかし、これらの条件下では、ブラウザは常にfirebaseは、ユーザーに応答する前routePageChangedが呼び出されているため、ログインページになってしまいます。 ファイアベースが応答するまで、そのオブジェクトが存在しないときに、認証されたファイアベースuser
の存在に依存するアドレスバーのルートからアプリケーションを正しくロードするにはどうすればよいですか?
私はあなたの提案を理解していれば、あなたは私は多分それは、「firebaseUserLoaded」と呼ばれるキーとテストを設定することを推奨しています私のルートのいずれかで '_routePageChanged'で何かを実行する前に。ネットワークの問題がある場合は、一見エラーのケースを設定する必要がありますか? –
ええ、あなたのルーティング関数では、boolean firebaseUserLoadedがtrueであるかどうかを調べるif文を持つことができます。 firebase-authコールバックでこのオブジェクトを設定します。ネットワークエラーが発生した場合は、上に示したjavascriptのエラーフローに入ります。その場合は、変数をtrueまたはfalseに設定します –