TypeScript: эффект NgRx для запуска действия - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок в NgRx, большая часть моего кода работает нормально, но я застрял на этом конкретном, и мне понадобится ваша помощь.

Когда эффект входа в систему был запущен и успешно отправлен в LoginSuccess, я пытаюсь сохранить в локальном хранилище и вызвать другое действие.

Ниже приведен мой пример кода

Эффект

    @Effect({ dispatch: false })
    LogInSuccess$: Observable<any> = this.actions$.pipe(
        ofType<businessActions.LogInSuccess>(
            businessActions.AuthActionTypes.LOGIN_SUCCESS
        ),
        map((action: businessActions.LogInSuccess) => {
            localStorage.setItem('token', JSON.stringify(action.payload));
            this.navCtrl.navigateRoot('/home');
        }), map(
            () => new businessActions.LoadBiz()
        )
    );

1 Ответ

0 голосов
/ 20 апреля 2020

Я предполагаю, что из ваших комментариев и кода вы пытаетесь реализовать некоторое поведение пользовательского интерфейса при ответе какой-либо службы (LoginService). Этот код подходит для библиотеки или для службы. Но в какой-то момент вам нужно знать результат, в какой-то момент вам нужно subscribe() к наблюдаемой, которую вы создаете, чтобы узнать его результат

В конце вызовите subscribe(). В противном случае ваша наблюдаемая никогда не материализуется.

ОБНОВЛЕНИЕ

Помимо вызова subscribe(), вам нужно перейти к /home url и затем в компоненте, который обрабатывает это route load your business: new businessActions.LoadBiz()

ваш код должен выглядеть так:

@Effect({ dispatch: false })
LogInSuccess$: Observable<any> = this.actions$.pipe(
    ofType<businessActions.LogInSuccess>(
        businessActions.AuthActionTypes.LOGIN_SUCCESS
    ),
    map((action: businessActions.LogInSuccess) => {
        localStorage.setItem('token', JSON.stringify(action.payload));
    })
).subscribe(() => this.navCtrl.navigateRoot('/home'));

тогда, где бы вы ни обрабатывали /home route, в методе init () компонента new businessActions.LoadBiz() или, что еще лучше, извлеките businessActions logi c в службу, внедрите службу и позвоните: businessActions.LoadBiz() тогда не нужно звонить new в пользовательском интерфейсе.

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