Probably you want to use <ng-content></ng-content>
inside your header.component.html and in the content pages u can write something like this:
...
<app-header>
<ul class="xy-content-page-header-menu">
<li><a routerLink="...">Content page specific link</a></li>
....
</ul>
</app-header>
...
On the other hand it allows you to use only one block of content that you can merge into your header component.
If there is more individual blocks to add then you need to use ngTemplateOutlet (https://angular.io/api/common/NgTemplateOutlet) or vcr.createEmbeddedView with angular templates. Example 1:
<app-header [inputTemplate]="menu">
<ng-template #menu let-element>
<ul class="xy-content-page-header-menu">
<li><a routerLink="...">Content page specific link {{element.data}}</a></li>
....
</ul>
</ng-template>
</app-header>
Inside your header.component.html:
<ng-container *ngTemplateOutlet="inputTemplate, context: { $implicit: some_data_data_for_element_object_outside }"></ng-container>
Example 2 (create custom structural directive (https://angular.io/guide/structural-directives) so you can query it in header.component.ts, you can use this in the prev example too if you want):
<app-header>
<ul class="xy-content-page-header-menu" *myStructuralDirective="let element">
<li><a routerLink="...">Content page specific link {{element.data}}</a></li>
....
</ul>
</app-header>
So you can query it and render into DOM in your header.component.ts (You need to know what ContentChild and ViewChild is What's the difference between @ViewChild and @ContentChild?):
@Component...{
...
@ContentChild(MyStructuralDirective) menu:MyStructuralDirective;
@ViewChild('whereTheMenuGoes', {read: ViewContainerRef}) elementVcr: ViewContainerRef;
...
someRenderFunction(){
this.elementVcr.createEmbeddedView(menu._template, this.some_data_data_for_element_object_outside)
}
...
Hope it helps :)