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

134
Vistas
cómo detener ngOnChanges Called antes de ngOnInit()

En mi aplicación angular, se me ocurrió una situación en la que solo se debe llamar a ngOnchanges cuando las entradas están vinculadas a cambios. Entonces, ¿hay alguna manera de detener la ejecución de ngOnChanges antes de ngOnInit? Hay alguna manera de lograr esto. Gracias de antemano.

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

0

No puede evitar este comportamiento, pero puede:

Usa un Asunto:

 class Foo implements OnChanges,OnInit,OnDestroy{ onChanges = new Subject<SimpleChanges>(); ngOnInit(){ this.onChanges.subscribe((data:SimpleChanges)=>{ // only when inited }); } ngOnDestroy(){ this.onChanges.complete(); } ngOnChanges(changes:SimpleChanges){ this.onChanges.next(changes); } }

Usa una propiedad booleana:

 class Foo implements OnChanges,OnInit{ initialized=false; ngOnInit(){ // do stuff this.initialized = true; } ngOnChanges(changes:SimpleChanges){ if(this.initialized){ // do stuff when ngOnInit has been called } } }

Usar la API de SimpleChanges

También puede consultar el método SimpleChange.isFirstChange() :

isFirstChange() : boolean Comprueba si el nuevo valor es el primer valor asignado.

 class Foo implements OnChanges,OnInit{ @Input() bar:any; ngOnInit(){ // do stuff } ngOnChanges(changes:SimpleChanges){ if(!changes["bar"].isFirstChange()){ // do stuff if this is not the initialization of "bar" } } }
over 4 years ago · Santiago Trujillo Denunciar

0

Un método que he encontrado que funciona se basa en el hecho de que todos los valores de entrada tienen una propiedad de valor anterior. Si la entrada no se ha configurado previamente, ese valor será CD_INIT_VALUE (como una cadena). Por lo tanto, puede establecer una condición para que su bloque de código en ngOnChanges solo se ejecute si el valor anterior no es CD_INIT_VALUE . Aquí hay un ejemplo para su caso en el que está probando TODOS los valores de entrada:

 ngOnChanges(changes: SimpleChanges) { let initialized: boolean = true; for (let prop in changes) { if (changes[prop].previousValue.toString() === 'CD_INIT_VALUE') { initialized = false; //we can break here since if any item is not initialized //we will say the inputs are NOT initialized break; } } if (initialized) { //code you want to execute } }

Probablemente haya soluciones más elegantes, pero he encontrado que esto funciona. Probablemente sea demasiado tarde para ayudarlo, pero puede ayudar a otros, ya que cuando busqué en Google encontré esta pregunta. La solución fue algo que descubrí a partir de la depuración.

over 4 years ago · Santiago Trujillo Denunciar

0

En caso de que ayude a alguien, aquí hay un ejemplo de cómo implementé la solución isFirstChange() sugerida por @n00dl3 en mi aplicación AngularJS:

 this.$onChanges = (changes) => { if (!changes.value.isFirstChange()) { // do stuff } };
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