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

243
Vistas
¿Puede un componente eliminar su propia plantilla y volver a colocarla condicionalmente?

Estoy mirando el código fuente de *ngIf :

 @Input() set ngIf(condition: any) { if (condition && !this._hasView) { this._hasView = true; this._viewContainer.createEmbeddedView(this._template); } else if (!condition && this._hasView) { this._hasView = false; this._viewContainer.clear(); } }

¿Puedo tener un componente que haga lo siguiente?

 @Component({}) class MyComponent{ constructor ( public _template : TemplateRef, public _viewContainer : ViewContainerRef) { } onSomeButtonClick(condition){ if(condition){ removeMyView(); }else{ putTheViewBackIfItsRemoved(); } } }

Intentar usar la lógica de ngIf dentro del componente no funciona, lo que creo que se debe a que viewContainerRef para el componente está vacío

EDITAR :

Solo para mencionar que no estoy buscando ocultar la vista, solo quiero eliminarla del DOM.

En otras palabras, ¿podemos hacer algo como ngIf de elementos host? Sé que no puede poner una directiva en host , por eso pensé que tal vez con ViewContainer y TemplateRef podría lograr lo mismo.

La otra cosa es que, habiendo trabajado con Angular y creando componentes dinámicos, ahora la única forma es usar ViewContainerRef para crear un nuevo componente en DOM; mi pregunta importante es, ¿Angular crea componentes de la misma manera?

En caso afirmativo, ¿no podemos acceder de alguna manera a ese contenedor que contiene los componentes?

Para aquellos que recién comenzaron a aprender Angular y quieren ayudar aquí (gracias por eso), debo decir que sinceramente sé cómo usar ngIf dentro de mi plantilla:

Sé qué es un ngIf y qué hace:

pero :

 <div *ngIf="condition"></div>

no es lo que quiero decir, simplemente porque esto eliminará potencialmente lo que está dentro de mi plantilla, y tengo que envolver todo dentro de ese div para que funcione, que no es lo que quiero.

Quiero borrar la plantilla por completo con ngIf ing el interior.


ACTUALIZAR :

Para dar alguna aclaración:

En otras palabras, es como tener un ngIf en el host:

 @Component({ host:{ '*ngIf':'shouldBeRemoved' } }) class MyComponent{

Sé que no puede poner ngIf en el host porque su directiva y el host solo compilan valores estáticos, por eso pregunto si hay una manera de manejarlo con viewContainerRef o algo así.

Por favor, sepa confundirse al poner ngIf dentro de la plantilla, eso no es lo que quiero.

Gracias por tu paciencia de nuevo.

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

0

No existe una forma oficial de eliminar una plantilla desde el interior de un componente y para mí tiene sentido. Si quitas tu plantilla, quién se va a encargar de volver a colocarla. Esto funciona en ngIf porque ngIf primero crea una template detrás de la escena y luego incrusta el elemento dentro de ella, por lo que tiene una referencia al elemento incrustado, por lo tanto, puede eliminarlo o volver a colocarlo.

about 4 years ago · Santiago Trujillo Denunciar

0

Esto es lo que estás buscando:

 @Component({ selector: 'your-selector', template: '<template [ngIf]="showView"> Here is my component template </template> ', }) class MyComponent{ showView: boolean = true; onSomeButtonClick(condition){ if (condition) { this.showView = false; } else { this.showView = true; } } }

Ahora, solo agregue un botón con una devolución de llamada onClick para llamar a onSomeButtonClick con algún parámetro y listo

about 4 years ago · Santiago Trujillo Denunciar

0

Solo puedo responder en base a mi comprensión limitada de cómo funcionan angular2 y mecanografiado.

Respuesta corta

No.

Respuesta larga

A nivel de mecanografiado, la plantilla y la clase parecen partes separadas. Sin embargo, la plantilla es en realidad parte de la declaración de clase.

Una vez que se inicia una clase de componente, todos esos enlaces de variables de plantilla, directivas, etc., se convierten en partes dentro del objeto del componente.

Cambiar, incluida la eliminación (lo que pide la pregunta), la plantilla básicamente significa volver a escribir la clase, será necesario volver a transcribirla y luego volver a compilarla/reiniciarla con el motor angular2.

Desde el punto de vista de la programación, esto es posible, especialmente con objetos javascript, que pueden tener un método para eliminar a todos los hermanos y reiniciar todo. Sin embargo, no veo una forma angular2 para que un componente se reinicie .

Actualmente, la técnica más cercana que conozco es el componente dinámico, del cual el componente principal puede crear y destruir. Y se menciona en la pregunta.

( reiniciar un componente es casi lo mismo que un componente dinámico, la diferencia se inicia interna o externamente).

about 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