Búsqueda de sitios web

typescript - Angular 2 Cómo hacer que el setter espere a que el setter de entrada se complete


Hola, tengo un problema con eso. En mi componente tengo un setter de entrada así:

 @Input() set editStatus(status: boolean) {
    this.savedEditStatus = status;
    if (this.savedEditStatus === true && this.getTrigg === true) {

        this.getDataFromFlex("SHOWS_L").then((data: any) => {
            this.getTrigg = false;
            this.lengthDataOptions = data;
        })
    } else {
        this.getTrigg = true;
        this.lengthDataOptions = undefined;
    }

};

Mi problema es que recibo dos estados de edición con valor verdadero y están llegando casi al mismo tiempo. Así que ahora mismo, para este componente, en este caso, la función getDataFromFlex se llamará dos veces. No quiero la segunda llamada, así que creo que getTrigg(boolean) sería una solución. Y no funciona. Así que necesito un poco de ayuda de ustedes. El getTrigg está, por defecto, configurado como verdadero al iniciar el componente.

Respuesta #1

Te recomiendo usar la interfaz ngOnChanges para hacer este tipo de comunicación con componentes externos. Esto asegurará que tengas el valor esperado para hacer lo que necesitas después de que este valor cambie:

import { Component, OnInit, Input, OnChanges, SimpleChange } from '@angular/core';

@Input() savedEditStatus: boolean; // change to field not getter / setter

ngOnChanges(changes: { [propKey: string]: SimpleChange }) {
    if (changes['savedEditStatus'] && changes['savedEditStatus'].currentValue === true && 
        this.getTrigg === true) {
        this.getDataFromFlex("SHOWS_L").then((data: any) => {
            this.getTrigg = false;
            this.lengthDataOptions = data;
        })
    } else {
        this.getTrigg = true;
        this.lengthDataOptions = undefined;
    }
}

Artículos relacionados