Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to ngFor on multiple types of components using ngComponentOutlet?

I've got a whatsapp-like chat case of many types of messages that are needed to be displayed differently.

Each has its' own component such as TextMessageComponent, FileMessageComponent, etc..

I'd like to be able to ngFor once on my array of messages without having to ngIf over the types.

I've heard ngComponentOutlet might be the solution but found it hard to implement..

Any suggestions, a mini demo or anything you find useful would be highly appreciated!

like image 394
Kesem David Avatar asked Jul 17 '17 07:07

Kesem David


1 Answers

Having a property on the object should help you

<div *ngFor="let item of items"  style="border: solid 1px; padding: 20px;margin: 20px;">
      <span style="color:red"> {{item.name}} </span>
      <ng-container *ngComponentOutlet="item.component"><ng-container>
  <br>
</div>

Array object should be as

items:Array<any> = [
{
  name: 'slider'
  component: sliderComponent

},
{
  name: 'user'
  component: usersComponent

},
{
  name: 'slider'
  component: sliderComponent

},
{
  name: 'alert danger'
  component: AlertDangerComponent
}

]

Ensure that all the components are loaded by using them in the AppModule

entryComponents: [AlertDangerComponent, AlertSuccessComponent, usersComponent, sliderComponent ]

LIVE DEMO

like image 147
Aravind Avatar answered Nov 03 '22 10:11

Aravind