Pasar HTML a mi componente

3 minutos de lectura

Avatar de usuario de Limnic
límnico

Considere el siguiente componente sidebar.component.html:

<div class="sidebar">
  <ul>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to the dashboard">
      <a href="#">
        <i class="material-icons">home</i>
        <span>Home</span>
      </a>
    </li>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Manage your times">
      <a href="#">
        <i class="material-icons">watch_later</i>
        <span>Times</span>
      </a>
    </li>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to settings">
      <a href="#">
        <i class="material-icons">settings</i>
      </a>
    </li>
  </ul>
</div>

En app.component.htmluso la barra lateral usando sus etiquetas (<sidebar>). Sin embargo, ahora quiero hacerlo para que el <li> Los elementos se dan dentro de la <sidebar> etiquetas para que ya no estén dentro sidebar.component.html para hacer que el componente sea reutilizable.

No estoy seguro de cómo se llama esto y tengo problemas para encontrarlo.

Gracias de antemano.

  • No entiendo cuál es el problema. Tal vez <ng-content></ng-content> por transclusión?

    – Günter Zöchbauer

    16 de febrero de 2017 a las 12:17

  • Actualicé la publicación para mayor claridad, probaré gracias.

    – Límnico

    16 de febrero de 2017 a las 12:20

Cree un componente de barra lateral con un <ng-content> donde se deben mostrar los niños pasados

@Component({
  selector: 'sidebar',
  template: '<ul><ng-content></ng-content></ul>'
})
export class SidebarComponent {
}

y usarlo como

<sidebar>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to the dashboard">
      <a href="#">
        <i class="material-icons">home</i>
        <span>Home</span>
      </a>
    </li>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Manage your times">
      <a href="#">
        <i class="material-icons">watch_later</i>
        <span>Times</span>
      </a>
    </li>
    <li class="tooltipped" data-position="right" data-delay="50" data-tooltip="Go to settings">
      <a href="#">
        <i class="material-icons">settings</i>
      </a>
    </li>
</sidebar>

  • ¡Sí, esto funciona según lo previsto! Sin embargo, ¿cuál es el comportamiento con CSS? Mi estilo ya no se aplica a los elementos, sin embargo, no puedo ver ningún cambio en el HTML que induzca un cambio en mis selectores.

    – Límnico

    16 de febrero de 2017 a las 12:29

  • El cambio es que Angular agrega _ng_context-xxx atributos y reescribe sus estilos antes de agregarlos al DOM. Necesitas agregar :host /deep/ li {} o similar para hacer que los estilos crucen los límites de los componentes.

    – Günter Zöchbauer

    16 de febrero de 2017 a las 12:31

  • Muy bien, gracias, ¡tengo suficiente información para comenzar!

    – Límnico

    16 de febrero de 2017 a las 12:36

¿Ha sido útil esta solución?