В настоящее время у меня есть компонент-контейнер (с отслеживанием состояния), который отправляет действия select
и get
на основе параметра маршрута (id) в методе ngOnInit
. Смысл этих действий в том, чтобы данные и выбранный id были в моем магазине.
Мне любопытно, было бы правильно отправлять эти действия в резолвер?
Спасибо за ответы.
Мой компонент:
@Component({
selector: 'app-container',
templateUrl: './container.component.html',
styleUrls: ['./container.component.css']
})
export class ContainerComponent implements OnInit, OnDestroy {
private componetDestroyed$ = new Subject();
constructor(private store: Store<fromRoot.State>, private route: ActivatedRoute) { }
ngOnInit() {
this.route.params
.filter(params => params['id'])
.map(params => params['id'])
.takeUntil(this.componetDestroyed$)
.subscribe(id => {
this.store.dispatch(new GetAction(id));
this.store.dispatch(new SelectAction(id));
});
}
ngOnDestroy() {
this.componetDestroyed$.next();
this.componetDestroyed$.unsubscribe();
}
}
Мои маршруты:
[{
path: ':id',
component: ContainerComponent
}]
Решателем будет:
@Injectable()
class MyResolver implements Resolve<any> {
constructor(private store: Store<fromRoot.State>) {}
resolve(route: ActivatedRouteSnapshot, state: RouteStateSnapshot) {
let id = route.params['id'];
this.store.dispatch(new SelectAction(id));
this.store.dispatch(new GetAction(id));
return null;
}
И модифицированные маршруты:
[{
path: ':id',
component: ContainerComponent,
resolve: {
store: MyResolver
}
}]
И поэтому я не уверен, что это правильно, потому что в магазине всегда будет null
.