Как передать компонент в качестве входных данных другому компоненту?

#angular #angular-components #ngx-bootstrap

#angular #angular-компоненты #ngx-bootstrap

Вопрос:

Я использую модальный компонент ngx-bootstraps и хочу динамически передавать его компоненты для отображения. Я не уверен, как это сделать.

Я использую следующий пример, компоненты в качестве содержимого: https://ng-bootstrap.github.io/#/components/modal/examples

Я не могу передать его с помощью @Input(), поскольку это не экземпляр переменной.

 import { Component, OnInit } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { ActualContentComponent} from 'path/path/path';

//TODO: Fix hard important of a component
@Component({
  selector: 'srd-modal',
  templateUrl: './srd-modal.component.html',
  styleUrls: ['./srd-modal.component.css']
})
export class SharedModalComponent implements OnInit {

  constructor(private modalService: NgbModal) {}

  open() {
    const modalRef = this.modalService.open(ActualContentComponent);
    modalRef.componentInstance.name = 'content';
  }

  ngOnInit() {
  }

}
  

Приведенный выше пример работает, однако у меня есть жесткая ссылка на ‘ActualContentComponent’. Я бы предпочел избежать гигантского переключателя, чтобы увидеть, какой компонент на самом деле открыть (передав имя компонента).

Редактировать: Я обнаружил, что действительно могу передать компонент с помощью @Input()

  @Input()
 public component;

 constructor(private modalService: NgbModal) {}

 open() {
    const modalRef = this.modalService.open(this.component);
    modalRef.componentInstance.name = this.buttonTitle;
  }
  

Я предполагал, что это будет невозможно в соответствии с некоторыми результатами поиска. Мне было интересно, какой тип данных я должен использовать для компонента.

РЕДАКТИРОВАТЬ 2: я думаю, введите в соответствии с https://angular.io/api/core/Type

Ответ №1:

Может быть, вы можете передать тип компонента в методе open ?:

     open(component: Type) {
         const modalRef = this.modalService.open(type);
         modalRef.componentInstance.name = 'content';
    }
  

Комментарии:

1. Я приму это как ответ, поскольку это решение также должно работать.