Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular2: replace host element with component's template

I'm new to angular in general and to angular2 specifically. I'm trying to write a container component, which should have child components in it.

For example, container component:

@Component({   selector: 'my-list',   template: `     <ul>       <ng-content></ng-content>     </ul>   ` }) export class MyList { } 

Child component:

import { Component } from 'angular2/core'  @Component({   selector: 'my-item',   template: `     <li>       <ng-content></ng-content>     </li>   ` }) export class MyItem { } 

I'd like to make this structure:

<my-list>     <my-item>One</my-item>     <my-item>Two</my-item> </my-list> 

To be rendered to the following one:

<my-list>     <ul>         <li>One</li>         <li>Two</li>     </ul> </my-list> 

But instead, I have the host element of the container and the items preserved as well:

<my-list>     <ul>         <my-item>             <li>One</li>         </my-item>         <my-item>             <li>Two</li>         </my-item>     </ul>  </my-list> 

Plunk is available here

Question: is there a way to eliminate the host elements and to leave only the rendered template?

like image 941
Denis Itskovich Avatar asked Mar 01 '16 21:03

Denis Itskovich


1 Answers

This you should get what you want:

@Component({   selector: 'ul[my-list]',   template: `     <ng-content></ng-content>   ` }) export class MyList { } 
@Component({   selector: 'li[my-item]',   template: `     <ng-content></ng-content>   ` }) export class MyItem { ... } 
<ul my-list>     <li my-item>One</li my-item>     <li my-item>Two</li my-item> </ul my-list> 
like image 118
Günter Zöchbauer Avatar answered Sep 25 '22 01:09

Günter Zöchbauer