Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

842
Vistas
¿Cómo verificar si <ng-content> está vacío? (en Angular 2+ hasta ahora)

Supongamos que tengo un componente:

 @Component({ selector: 'MyContainer', template: ` <div class="container"> <!-- some html skipped --> <ng-content></ng-content> <span *ngIf="????">Display this if ng-content is empty!</span> <!-- some html skipped --> </div>` }) export class MyContainer { }

Ahora, me gustaría mostrar algún contenido predeterminado si <ng-content> para este componente está vacío. ¿Hay una manera fácil de hacer esto sin acceder directamente al DOM?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Envuelva ng-content en un elemento HTML como un div para obtener una referencia local, luego vincule la expresión ngIf a ref.children.length == 0 :

 template: `<div #ref><ng-content></ng-content></div> <span *ngIf=" ! ref.children.length"> Display this if ng-content is empty! </span>`

Actualizado para Angular 12; La lógica antigua (" ref.nativeElement.childNodes.length ") da error, ya que nativeElement no está undefined hoy en día.

over 4 years ago · Santiago Trujillo Denunciar

0

EDITAR 17.03.2020

CSS puro (2 soluciones)

Proporciona contenido predeterminado si no se proyecta nada en ng-content.

Posibles selectores:

  1. :only-child . Vea esta publicación aquí: Selector de hijo único

    Este requiere menos código / marcado. Soporte desde IE 9: ¿Puedo usar: hijo único?

  2. :empty . Simplemente lea más.

    Soporte desde IE 9 y parcialmente desde IE 7/8: https://caniuse.com/#feat=css-sel3

HTML

 <div class="wrapper"> <ng-content select="my-component"></ng-content> </div> <div class="default"> This shows something default. </div>

CSS

 .wrapper:not(:empty) + .default { display: none; }

En caso de que no funcione

Tenga en cuenta que tener al menos un espacio en blanco se considera que no está vacío. Angular elimina los espacios en blanco, pero por si acaso, si no es así:

 <div class="wrapper"><!-- --><ng-content select="my-component"></ng-content><!-- --></div>

o

 <div class="wrapper"><ng-content select="my-component"></ng-content></div>
over 4 years ago · Santiago Trujillo Denunciar

0

Faltan algunos en la respuesta de @pixelbits. Necesitamos verificar no solo la propiedad de los children , porque cualquier salto de línea o espacio en la plantilla principal hará que el elemento de los children tenga texto en blanco\saltos de línea. Es mejor verificar .innerHTML y .trim() .

Ejemplo de trabajo:

 <span #ref><ng-content></ng-content></span> <span *ngIf="!ref.innerHTML.trim()"> Content if empty </span>
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda