Угловая маршрутизация: определить, был ли выполнен router.navigate () - PullRequest
0 голосов
/ 18 октября 2019

У меня есть приложение Angular 8 с ngrx. Я использую параметры пути и параметры запроса.

Если пользователь делает какой-либо конкретный выбор в веб-приложении (скажем, он выбирает определенный идентификатор), я выполняю router.navigate () и обновляю URL браузера с помощью идентификатора. Таким образом, состояние приложения и URL-адреса браузера синхронизированы.

С другой стороны, я слушаю

@Effect()
nav$ = this.actions$.pipe(
    ofType(ROUTER_NAVIGATED),
    ...
    switchMap(result => [
        new SetIDInStore(id),
    ])

события навигации и обновляю хранилище. Таким образом, пользователь может сохранить глубокую ссылку со всеми своими настройками и выполнить ее позже. Если пользователь выполняет эту ссылку в браузере, все его настройки применяются в магазине. Итак, все синхронизировано: -)

Но теперь есть один случай, когда я получаю состояние гонки. Я мог бы решить это, если бы мог определить, было ли событие навигации инициировано пользователем, а не кодом. Примерно так:

@Effect()
nav$ = this.actions$.pipe(
    ofType(ROUTER_NAVIGATED),

    if (Event was triggered by user then update the store *1) {
        dispatch ngrx event
    }
    else if (Event was triggered by router.navigate() ) {
        do nothing
    }

Кстати: я реализовал CustomSerializer.

* 1 = если он вводит URL-адрес в адресную строку браузера или изменяет его

-

Вкратце: мне нужно как-то разделить события: - пользователь изменил URL в адресной строке вручную - я выполнил router.navigation в своем коде, тогда мое решение будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...