Мне удалось найти решение ситуации.
Постановка проблемы: я пытался использовать существующий компонент (назовем его ChildComponent) в двух разных местах. Один как обычный дочерний компонент, а второй как компонент в диалоге материалов.
Задача: чтобы передать данные в диалоговый компонент, нам нужно @Inject (MAT_DIALOG_DATA) в дочернем компоненте. Но когда вы внедряете ChildComponent в обычный компонент, вы не предоставляете какого-либо поставщика для @Inject (MAT_DIALOG_DATA). Следовательно, происходит сбой во время инициализации. И нам нужен '@Inject (MAT_DIALOG_DATA)', если мы хотим использовать ChildComponent внутри диалога Mat.
Решения:
1. Создайте компонент-обертку, давайте вызовем его (ChildWrapperComponent). Для обычного варианта использования непосредственно вставьте ChildComponent в родительский компонент. Принимая во внимание, что для варианта использования Mat Dialog укажите ChildWrapperComponent
const dialogRef = this.dialog.open(ChildWrapperComponent, {
width: '90%',
disableClose: false,
data: {
fileName: this.fileName,
results: this.results
}
} );
Теперь вы можете хранить данные внутри ChildWrapperComponent, используя данные @Inject (MAT_DIALOG_DATA)
constructor(private spinner: EdpLoaderService, private dialog: MatDialog,
@Inject(MAT_DIALOG_DATA) data,
private dialogRef: MatDialogRef<ChildWrapperComponent>) {
this.setInputData(data);
}
Когда у вас есть данные внутри ChildWrapperComponent, вставьте дочерний компонент в оболочку и передайте данные с помощью @Input ().
- Я не пробовал другое решение, но для такого же обмена данными мог бы использоваться сервис, но я просто хотел выбрать более сложный маршрут: P.
Я новичок в Angular. Буду очень признателен за лучшее или другие решения.