Angular 5 Adding a new instance of a component

ped*_*nez 2 javascript angular

I am using angular 5 and I want to create new instances of a component on demand.

This is the code I currently have:

app.component.ts:

import { Component } from '@angular/core';
import { MyComponent } from './mycomp/my.component';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  constructor() {}
  addCmp() {
    console.log('adding');
    // Add an instance of MyComponent code goes here ?
  }
}
Run Code Online (Sandbox Code Playgroud)

app.component.html

<button (click)="addCmp()" >Add New MyComponent below</button>
Run Code Online (Sandbox Code Playgroud)

MyComponent.html:

<div>I am MyComponent</div>
Run Code Online (Sandbox Code Playgroud)

How can I do this?

G.V*_*lli 5

这是您自己创建组件的方法:(别忘了销毁它!在componentRef上调用destroy()可以做到这一点)

父组件:

@ViewChild('componentHolder', { read: ViewContainerRef }) componentHolder: ViewContainerRef;

constructor(private componentFactoryResolver: ComponentFactoryResolver) { }

public createComponent(): void {
          const componentFactory = this.componentFactoryResolver.resolveComponentFactory(MyComponent);
          const componentRef = this.componentHolder.createComponent(componentFactory);
}
Run Code Online (Sandbox Code Playgroud)

父组件HTML:

<button (click)="createComponent()">Add New MyComponent below</button>
<div #componentHolder ></div>
Run Code Online (Sandbox Code Playgroud)

在NgModule中添加MyComponent:

...
  imports: [
    BrowserModule,
    FormsModule,
    RouterModule.forRoot(appRoutes),
  ],
  entryComponents: [
    MyComponent
  ],...
Run Code Online (Sandbox Code Playgroud)