Winkel: Pass-Komponente auf eine Komponente
Habe ich dieses kleine gridComponent:
@Component({
selector: 'moving-grid',
templateUrl: './grid.component.html',
styleUrls: ['./grid.component.css']
})
export class GridComponent {
@Input('widgets') extComponents: Array<Component>;
}
Und eine zweite testComponent
@Component({
selector: 'test',
template: `
<div #content>I say hello<li>i</li><li>u</li><button (click)="test()">click me</button> world</div>
`
})
export class TestComponent {
@ViewChild('content') content: HTMLElement;
getContent() {
return this.content;
}
test() {
console.log("test");
}
}
Versuche jetzt, übergeben Sie mehrere Instanzen von testComponent der gridComponent. Deshalb habe ich eine Dritte Komponente, die aussieht wie diese:
template: `
<moving-grid [widgets]="[z1,z2]">
<test class="grid-item-content-001" #z1></test>
<test class="grid-item-content-002" #z2></test>
</moving-grid>
`
Bis zu diesem Punkt funktioniert alles wie erwartet. Aber wie kann ich das Rendern der Komponenten von @Input in die gridComponent?
Mein Erster Ansatz war es zu erklären, @ViewChild in der testComponent und senden Sie es mit einem getContent()-Funktion. Aber es wird nicht funktionieren. Kann ich mit der ng-content-Richtlinie, die in irgendeiner Weise oder gibt es eine bessere Lösung?
Den GridComponent sieht wie folgt aus. Ich möchte die Anzeige der Vorlagen von @Input-Komponente in eines der schwarzen Felder. Ist es möglich?
Vielen Dank für jede Art von Hilfe
- Für zukünftige Leser; vielleicht wollen Sie auch zu prüfen, die Dynamische Komponente Loader. Winkel.io/guide/dynamic-Komponente-loader
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden eine
@Input
pass in die Komponenten. Sie können@ContentChildren
und eine abstrakteWidgetComponent
:Die Vorlage Ihres Dritten Komponente wird die gleiche bleiben, aber ohne die
[widgets]
und einen zusätzlichen#widget
name:Ihre
TestWidgetComponent
die Erweiterung einer abstrakten WidgetComponent :Und Ihre
WidgetComponent
:Und Sie haben einige grid-widgets basierend auf dem Typ des widgets:
[innerHtml]
zum Beispiel. Ich hoffe, meine Antwort gibt Ihnen Ideen zu tun, es auf andere Weise zu