Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

854
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda