Я работаю над angular. В моем проекте действие по загрузке данных при загрузке первой страницы отправляется от сторожа. Мне нужно было изменить охрану, чтобы получить доступ к магазину. Я подписываюсь на магазин в конструкторе и получаю доступ к любым данным, которые я хочу. Где можно отписаться от магазина? Могу ли я использовать ngOnDestroy ??
Это мой код
import { Observable, Subject } from 'rxjs';
import { Store, Action, State } from '@ngrx/store';
import { Actions, Effect, ofType } from '@ngrx/effects';
import { Injectable } from '@angular/core';
import { Router, Resolve, ActivatedRouteSnapshot, CanActivate } from '@angular/router';
import * as UpdateStore from '../store';
import { SetEntityType, LoadEntityList1 } from '../store/actions/Update.actions';
import { takeUntil } from 'rxjs/operators';
@Injectable()
export class EntityListingGuard implements CanActivate {
Framework: any;
Status: any;
Type: any;
destroyStore$ = new Subject();
constructor(
private store: Store<UpdateStore.State>,
private actions$: Actions,
private router: Router
) {
this.store.pipe(
takeUntil(this.destroyStore$)
).subscribe((state) => {
this.Framework = state.SelectedFilters['frameworksChecked'] ? state.SelectedFilters['frameworksChecked'] : [];
this.Type = state.SelectedFilters['typeChecked'] ? state.SelectedFilters['typeChecked'] : [];
this.Status = state.SelectedFilters['statusChecked'] ? state.SelectedFilters['statusChecked'] : [];
});
}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> | Promise<boolean> | boolean {
const entityType = route.params['entityType'];
const releaseId = route.params['releaseId'];
const noOfUpdates = route.params['noOfUpdates'];
const payload = {
'searchTerm': '', pageLimit: 50, 'entityType': entityType, 'releaseId': releaseId, noOfUpdates: noOfUpdates,
'checkedJobFrameworks': this.Framework 'checkedJobStatus': this.Type 'checkedJobType': this.Type
};
this.store.dispatch(SetEntityType({ entityType: entityType }));
this.store.dispatch(LoadEntityList1({ payload: payload }));
const responseOK = this.actions$.pipe(ofType(UpdateActions.LoadEntityList1Success));
const responseERROR = this.actions$.pipe(ofType(UpdateActions.globalError));
return Observable.race(responseOK, responseERROR).take(1)
.map(action => {
if (action['type'] === '[Layout] Global Error') {
return false;
} else {
return true;
}
}).first();
}
}