2016-12-05 6 views
0

У меня есть приложение polymer starter kit с несколькими подпунктами и различными типами записей, связанных с этими маршрутами. Пример URL может быть //myapp/records/{recordId}/subRoute. Я бы хотел, чтобы состояние приложения сохранялось при перезагрузке. Я пробовал так:Загрузка пользовательских маршрутов из адресной строки с помощью polymfire

<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> 

Но в этих условиях, браузер всегда будет в конечном итоге на странице входа в систему, так как routePageChanged вызывается перед firebase реагирует с пользователем. Как я могу настроить приложение для правильной загрузки маршрутов адресной строки, которые зависят от существования firebase user, когда этот объект не существует до тех пор, пока не ответит firebase?

ответ

0

Вы можете сделать несколько вещей. Поскольку вы ждёте пользователя, вам нужно, чтобы объект пользователя был инициализирован.

В firebase-AUTH, есть объект пользователя:

user: { 
    type: Object, 
    readOnly: true, 
    value: null, 
    notify: true 
}, 

Вы можете прослушивать изменения на этом объекте.

Альтернативный способ справиться с этим, как это:

this.$.auth.signInWithPopup() 
.then(function(response) {// successful authentication response here}) 
.catch(function(error) {// unsuccessful authentication response here}); 

на успех выше кода, объект пользователя должен быть установлен, вы можете проверить свой первоначальный маршрут с этим.

Я не могу придумать никаких других вариантов на моей голове.

Другое то, что я должен рекомендовать документацию, конечно: P

https://github.com/firebase/polymerfire/blob/master/firebase-auth.html

+0

Если я понимаю, ваше предложение, вы рекомендовать, что я, возможно, установить ключ под названием «firebaseUserLoaded» и тест на него перед выполнением чего-либо в '_routePageChanged' на любом из моих маршрутов. Тогда мне казалось бы необходимо настроить ошибку, если есть проблемы с сетью? –

+0

Да, в вашей функции маршрутизации у вас может быть инструкция if, которая проверяет, истинна ли логическая firebaseUserLoaded. Вы устанавливаете этот объект в обратном вызове firebase-auth. Если возникает сетевая ошибка, она войдет в поток ошибок javascript, который я показал выше, в этом случае вам нужно установить переменную в true или false –