Angular mismo componente diferentes plantillas
¿Cómo puedo reutilizar un componente con diferente contenido? Tengo un componente <code>quick-links</code>
que extiende el componente <code>dashboard-panel</code>
y tiene un título y un contenido. Quiero reutilizar ese componente <code>quick-links</code>
con diferentes títulos y contenidos.
<dashboard-panel>
<span class="title">Getting Started</span>
<div class="content">
<div class="wrapper">
<div class="inner">
<a href="" target="_blank">
<i class="material-icons icon-promote">north_east</i>
<span>Promote Yourself</span>
</a>
</div>
<div class="inner">
<a href="" target="_blank">
<i class="material-icons icon-pro-page">stars</i>
<span>Set Up Pro Page</span>
</a>
</div>
<div class="inner">
<a href="" target="_blank">
<i class="material-icons icon-play">play_arrow</i>
<span>Set Up Blaze Player</span>
</a>
</div>
<div class="inner">
<a href="" target="_blank">
<i class="material-icons icon-soundcloud">
<img src="assets/img/service-logos/soundcloud.svg" alt="soundcloud" class="">
</i>
<span>SoundCloud Monetization</span>
</a>
</div>
</div>
</div>
</dashboard-panel>
Como se muestra en esta captura de pantalla, solo puedo cambiar el título de este componente usando @Input
porque es solo una línea, pero ¿qué pasa si también necesito cambiar todo el contenido? ¿Cuál es la mejor manera de lograr eso?
davy.ai
Para reutilizar el componente
quick-links
con diferentes títulos y contenidos, puedes crear un componente separado para el contenido y utilizarlo como componente hijo del componentequick-links
. Este componente hijo tendrá su propio contenido que puede ser pasado desde el componente padre utilizando el decorador@Input
.Veamos cómo puedes lograrlo:
quick-links
. Llamémosloquick-links-content
. La plantilla de este componente deberá tener la estructura HTML que deseas reutilizar en el componentequick-links
.QuickLinksContentComponent
en el componenteQuickLinks
y pasa el contenido como@Input
:QuickLinks
donde lo necesites en tu aplicación y pasarle diferentes contenidos como@Input
. Por ejemplo:Esto renderizará el componente
QuickLinks
con el nuevo título y contenido que hayas pasado como@Input
.