I am trying to build a custom component using multiple ng-content
in Angular 6, but this is not working and I have no idea why.
This is my component code:
<div class="header-css-class">
<ng-content select="#header"></ng-content>
</div>
<div class="body-css-class">
<ng-content select="#body"></ng-content>
</div>
I am trying to use this component in another place and render two different HTML code inside body
and header select
of ng-content
, something like this:
<div #header>This should be rendered in header selection of ng-content</div>
<div #body>This should be rendered in body selection of ng-content</div>
But the component is rendering blank.
Do you guys know what I could be doing wrong or what is the best way to render two different sections in same component?
Thanks!
alternatively you can use:
app.comp.html
child.comp.html
To fit the Web Component specs. Even if that's Angular. It's about avoiding attributes for selector like Angular directives or reserved attributes with another use. So, we just use the "slot" attribute. We'll see
<ng-content select="[slot=foobar]">
as<slot name="foobar">
.Example:
hello-world.component.html
app.component.html
Result
Stackblitz Example
You can use any name you want like "banana" or "fish". But "start" and "end" are a good convention to place elements before and after.
header
andbody
as opposed to template references(#header, #body)
.ng-content
withselect
attribute likeselect="[header]"
.app.comp.html
child.comp.html
DEMO