2017-09-16 1 views
0

Ich habe ein paar Beispiele dafür gesehen, wie dies hier und um das Netzwerk herum gemacht wird, aber wenn ich es versuche, wird meine untergeordnete Komponente als Peer in das DOM eingefügt die Zielkomponente. Hier wird Markup Ich arbeite mit:Dynamische eckige Komponente als untergeordnetes Element einer anderen Komponente einfügen

<div #target></div> 
<button (click)="AddTile()">Add Tile</button> 

Hier ist die übergeordnete Komponente Code:

import { Component, ComponentFactoryResolver, ViewContainerRef, ViewChild }  from '@angular/core'; 
import { TileComponent } from './tile/tile.component'; 

@Component({ 
selector: 'app-root', 
templateUrl: './app.component.html', 
styleUrls: ['./app.component.css'] 
}) 

export class AppComponent{ 
    title = 'app works!'; 

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

    constructor(private componentFactoryResolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef) {} 

    AddTile() { 
    const factory = this.componentFactoryResolver.resolveComponentFactory(TileComponent); 
    const res = this.target.createComponent(factory); 
    } 
} 

Der Ausgang dieses Codes ist:

<div #target></div> 
<tile-component></tile-component> 
<tile-component></tile-component> 

Die erwartete Ausgabe lautet:

<div #target> 
    <tile-component></tile-component> 
    <tile-component></tile-component> 
</div> 
+0

planen Sie auf Benutzeraktionen basieren unterschiedliche dynamische Komponenten zu verwenden? – Aravind

+0

Nein, die gleiche Komponente. Es wird auch nicht auf Benutzeraktionen basieren, aber ich muss dynamisch eine variierende Anzahl dieser Komponenten zur Laufzeit hinzufügen. Ich verwende hier einen Button als Teil eines POC. – Lazloman

Antwort

2

Möglicherweise möchten Sie ng-container als Ziel verwenden, wodurch kein Element im DOM verbleibt. So werden Sie nur mit der Komponente bleiben in Ihrem div:

<div> 
    <ng-container #target></ng-container> 
</div> 
+0

Das funktioniert. Ich habe versucht, ein div zu verwenden, das das gleiche Ergebnis liefert, außer natürlich, dass das div im DOM bleibt, das, obwohl kein Showstopper, es immer noch unerwünscht ist. Danke – Lazloman

+0

Gern geschehen. Ich wundere mich jetzt, da die Komponente immer die gleiche ist, können Sie nicht einfach "ngFor" in Ihrer Vorlage, die Schleife über ein Dummy-Array, dessen Länge ist die Anzahl der Komponenten, die Sie brauchen? –

+0

Das ist auch eine Option. Ich untersuche die verschiedenen Möglichkeiten, dies zu tun. Looping könnte eigentlich am einfachsten sein. – Lazloman

Verwandte Themen