Рендеринг компонентов динамически - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь сделать страницу Ioni c dynamici c, где будут отображаться два компонента. Например:

У меня есть JSON:

[
    {
       book_code: 237
       description: "Lorem ipsum dolor sit amet...."
       id: 4
       name: "Book 4"
       page_id: 1
       price: 404
       read_status: "Complete"
    },
    {
       description: "This is a description."
       id: 0
       name: "Movie 0"
       page_id: 2
    }
 ]

Где page_id - это параметр для загрузки компонента.

В моем классе TS I ' я делаю это:

  loadComponents(){
    for(let i = 0; i < this.items.length; i++){
      this.componentsToLoad.push(this.getComponent(this.items[i]));
    }
    console.log(this.componentsToLoad);
  }

  getComponent(item: any){
    let klass = this.avaliableComponents[item['page_id']];
    let instance = new klass()
    instance.draw(item);
    return klass; // If I return 'instance', i get 'No component factory found for [object Object]' error.
  }

Метод draw делает это:

draw(data: any) {
    this.movie.id = data['id'];
    this.movie.name = data['name'];
    this.movie.pageId = data['page_id'];
    this.movie.description = data['description'];
}

PS: для каждого класса (Mov ie и Book) есть специфика c реализация.

На моей странице компоненты отображаются правильно, но значения не верны, значения пустые.

Я пытаюсь console.log метод draw, и я увидел, что значения установлены правильно.

Я рендеринг компонентов, как это:

<div *ngFor="let component of componentsToLoad" style="background-color: white;">
    <ng-container *ngComponentOutlet="component"></ng-container>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...