У меня есть канал, который должен иметь доступ к данным маршрута, чтобы быть правильно построенным:
export class LevelPercentagePipe implements PipeTransform {
levelDictionnary: LevelDictionnary;
constructor(private route: ActivatedRoute) {
this.levelDictionnary = new LevelDictionnary(this.route.snapshot.data['prerequisiteLists']);
}
}
Эти данные разрешаются в модуле маршрутизации:
{
path: 'xxx',
loadChildren: './xxx/xxx.module#XxxModule',
resolve: {
prerequisiteLists: PrerequisiteResolver
}
}
Это работаетв других местах моего приложения, если канал используется в HTML-шаблон.Но в данном конкретном случае мне нужно использовать этот канал в моем файле component.ts
.Поэтому я предоставил его в модуле специальных функций:
@NgModule({
declarations: [...],
imports: [...],
providers: [LevelFilterPipe],
})
Но теперь, когда он внедряется в мой конструктор компонентов, он, похоже, не знает о данных в ActivatedRoute
.
constructor(
private profileService: ProfileService,
private nameFilterPipe: NameFilterPipe,
private levelFilterPipe: LevelFilterPipe
) {}
Это не работает.
Так что вместо этого мне нужно построить канал вручную.
constructor(
private profileService: ProfileService,
private route: ActivatedRoute,
private scorePipe: ScorePipe,
private nameFilterPipe: NameFilterPipe
) {
// We have to inject route data and scorePipe manually because it's not injected automatically.
this.levelFilterPipe = new LevelFilterPipe(this.route, this.scorePipe);
}
Есть ли другой способ ввода данных из ActivatedRoute
автоматически?