我正在尝试在 Angular 中构建一个可以在内部渲染不同组件的组件;它就像一个动态表格,因此当用户单击该行时,它会展开以显示某些内容;取决于某些东西,理想情况下是任何东西。
所以,我正在尝试使用 ng-content,但它并没有像我预期的那样工作。我试图将它减少到我想要的plunker中的最小功能。
基本上,我有一个父组件(my-parent),它是一个表格并显示行列表,但对于每一行,我还希望在下面显示另一行,其中包含其父级投影的组件内容。
我的应用组件
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<div>
<my-parent [data]="rows">
<my-child *ngFor="let r of rows" [name]="r.name"></my-child>
</my-parent>
</div>
`
})
export class AppComponent {
rows = [
{ name: 'data1' },
{ name: 'data2' },
{ name: 'data3' },
{ name: 'data4' }
];
}
我在 my-parent 中投影 4 个组件,每行一个。
然后在我的父母
import { Component, Input, OnInit } from '@angular/core';
@Component({
selector: 'my-parent',
template: `
<table>
<thead>
<tr>
<th>my data header</th>
</tr>
</thead>
<tbody>
<ng-container *ngFor="let d of data">
<tr>
<td>{{ d.name }}</td>
</tr>
<tr>
<td>
<ng-content></ng-content>
</td>
</tr>
</ng-container>
</tbody>
</table>
`
})
export class ParentComponent {
@Input() data: any;
}
在这里,我显示所有行,并且我希望每一行也有它的相关行波纹管。
最后,my-child 组件
import { Component, Input } from '@angular/core';
@Component({
selector: 'my-child',
template: `
<h2>name: {{ name }}</h2>
`
})
export class ChildComponent {
@Input() name: string;
}
这实际上做了一些事情,它显示表中的所有行,然后投影所有组件
my data header
data1
data2
data3
data4
name: data1
name: data2
name: data3
name: data4
但我想这样显示
my data header
data1
name: data1
data2
name: data2
data3
name: data3
data4
name: data4
我理解我这样做的方式没有多大意义,因为我没有告诉 Angular 在哪里显示每个投影组件,但是我尝试了ng-content select
它但它不起作用,因为我的选择必须是动态的,比如ng-content select="#{{d.name}}"
和使用<my-child id="{{r.name}}"></my-child>
我读过有关使用模板和东西的信息,但老实说,我无法理解它。任何人都愿意看看plunker并提出一些建议吗?
谢谢