В вашем компоненте app-block сохраните выход ng-content
block.component. html
<h2>Some text</h2>
<ng-content></ng-content>
Используя это, что бы вы ни поместили в свой тег, они будут рендеринга, включая тот же компонент, вложенный внутрь.
Обновление:
block.component.ts
@Input() block: Block;
block.component. html
<div class="block">
<div>
id: {{block.id}}
</div>
<ng-container *ngIf="block?.blocks?.length">
<div class="nestedBlocks" *ngFor="let eachBLock of block.blocks">
<app-block [block]="eachBLock"></app-block>
</div>
</ng-container>
</div>
app.component. html
<app-block [block]="rootBlock"></app-block>