要将信息传递给父组件,可以使用EventEmitter,但必须创建两个不同的组件,如下所示:
MainComponent.html:
<table class="table table-striped">
<thead>
<tr>
<td><strong>Nr</strong></td>
<td><strong>Name</strong></td>
</tr>
</thead>
<tbody style="overflow:scroll;">
<details-component ngFor="let item of listItems; let i = index;"
(click)="setClickedRow(i)"
[class.active]="i == selectedRow"
[index]="i"
[itemId]="{{item.id}}"
[description]="{{item.description}}"
(selectSibling)="setClickedRow(siblingNumber)">
</details-component>
</tbody>
</table>
新详图构件类:
@Component({
selector: 'details-component',
templateUrl: 'details-component.html'
})
export class DetailsViewComponent implements OnInit, OnDestroy {
@Output() selectSibling: EventEmitter<number> = new EventEmitter<number>();
@Input() index: number;
@Input() description: string;
@Input() itemId: string;
subscription: Subscription;
public item = new Item();
constructor(private route: ActivatedRoute, private itemService: ItemService) {}
ngOnInit() {
this.itemService.get(this.itemId).subscribe(item => {
this.item = item;
});
}
selectNextSibling(): void {
this.selectSibling.emit(this.index+1);
}
selectPreviousSibling(): void {
this.selectSibling.emit(this.index-1);
}
}
您必须在单击相应的箭头时触发selectNextSibling和selectPreviousSibling,并在setClickedRow()方法中执行正确的数组边界检查:)