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

129
Views
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.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

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" } } }
about 4 years ago · Santiago Trujillo Report

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.

about 4 years ago · Santiago Trujillo Report

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 } };
about 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!