Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

843
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!