Итак, мой мыслительный процесс состоит в том, что есть два способа сделать это.Я бы отказался от того, как вы это делаете, и вместо этого условно проверил данные в вашем пользовательском компоненте.Одним из способов является использование источников событий и передача данных через компонент:
Страница с использованием динамического компонента
<dynamic-component [settings]="{ type: 'customType', params: { number: 1 } }"></dynamic-component>
Динамический компонент
@Component({
selector: 'dynamic-component',
templateUrl: './dynamic-component.html',
styleUrls: ['./dynamic-component.style.scss'],
})
export class DynamicComponent implements OnInit {
@Input()
settings: any
constructor() {
if (this.settings.type === 'customType') {
// Handle conditional data
}
}
Другой способ - обработкаданные между сервисами.
Служба
@Injectable()
export class SharedService {
sharedData: BehaviorSubject<any> = new BehaviorSubject<any>(null)
constructor() {}
}
Чтобы передать данные со (любой) страницы, внедрите службу в конструктор и вызовите .next для субъекта поведения.
constructor(private sharedService: SharedService) {
sharedService.sharedData.next({ type: 'customType', otherParam: 'foo' })
}
Затем подпишитесь на данные и проверьте соответственно
Динамический компонент
@AutoUnsubscribe()
@Component({
selector: 'dynamic-component',
templateUrl: './dynamic-component.html',
styleUrls: ['./dynamic-component.style.scss'],
})
export class DynamicComponent implements OnInit, OnDestroy {
// Subscriptions
sharedSub$: Subscription
constructor(private sharedService: SharedService) {
this.sharedSub$ = sharedService.sharedData.subscribe((data) => {
if (data.type === 'customType') {
// Now you have the conditional data
}
})
ngOnDestroy() {}
}
@ AutoUnsubscribe просто мое предложение для обработки памяти и предотвращения утечек.