Я использую ngrx/store
для осуществления действий входа в систему, которая получает дату от подписки на магазин.Компонент входа в систему является модальным, когда я набираю неправильный пароль, я получаю data.type === 'LOGIN_FAILED'
, однако, когда я закрываю модальный и снова открываю его, действие с данными все еще равно LOGIN_FAILED
вместо INIT
.Таким образом, действия входа не отписаться, я пытался вручную отписаться от подписки, но это не работает.Как правильно отписаться от действий при входе?
import { Component, OnInit, ViewChildren, OnDestroy } from '@angular/core';
// shared
import { ToasterService } from '../../shared/providers/toaster-service/toaster.service';
// ngx-bootstrap
import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
// ngrx
import { ActionsSubject } from '@ngrx/store';
// rxjs
import { Subscription } from 'rxjs/Subscription';
loading = <boolean>false;
actionSub = new Subscription();
errorMessage = <string>'';
constructor(
private actionsSubj: ActionsSubject,
private toastService: ToasterService,
private bsModalRef: BsModalRef,
) {
this.actionSub = this.actionsSubj.subscribe((data: any) => {
// listen to action of setting tokens successfully / failed
console.log(data);
if (data.type === 'LOGIN_FAILED') {
if (data.payload.error.error.data.type === 'WrongCredentialsException') {
// hide spinner for login button
this.loading = false;
this.errorMessage = 'Wrong Credentials';
else {
this.loading = false;
this.toastService.showError('An error happened when trying to login. Please try again later.');
}
} else if (data.type === 'SET_TOKEN') {
this.bsModalRef.hide();
}
});
}
ngOnDestroy() {
this.actionSub.unsubscribe();
}