-1
votes

Angulaire - exécuter une méthode avant une autre

J'ai deux méthodes, une valeur de poussée et l'autre fait une patteValue, j'ai besoin de la valeur de poussée à finaliser de manière à ce que la méthode de la valeur de correctif puisse fonctionner correctement. Je les appelle tous les deux dans un NgafterViewInit, j'aimerais connaître un moyen de le faire sans appeler la méthode de la valeur du patch à l'intérieur de la méthode de la valeur de poussée.

Les deux méthodes sont appelées ici p> xxx pré>

Méthode PatchValue: P>

private inicializarListaGrupoAnaliseCae(): void {
        this.grupoAnaliseCaeService
            .findAll()
            .subscribe(res => {
                res.forEach((grupoAnaliseCae: GrupoAnaliseCae) => {
                    if(grupoAnaliseCae.nuNivelGrupo==null){
                    this.listaGrupoAnaliseCae.push({ label: grupoAnaliseCae.noGrupoAnaliseCae, value: grupoAnaliseCae });
                    this.formataNomeGrupo();
                    }
                });
            });
    }


0 commentaires

4 Réponses :


-1
votes

Essayez de convertir l'observable en une promesse, comme: xxx

alors attendez cette promesse dans ngafterviewinit Comme: xxx

ici est une illustration de Stackblitz. < / p>


0 commentaires

0
votes

Une fois que vous avez introduit un seul point de paradigme réactif (l'abonnement ici) dans votre programme, toutes les déclarations suivantes dépendantes devraient également être réactives. La solution la plus rapide de votre scénario serait d'appeler la fonction dépendante à l'intérieur de l'abonnement.

ngAfterViewInit(): void {
  this.inicializarListaGrupoAnaliseCae();
  this.cdr.detectChanges();
}

private inicializarListaGrupoAnaliseCae(): void {
  this.grupoAnaliseCaeService
    .findAll()
    .subscribe(res => {
      res.forEach((grupoAnaliseCae: GrupoAnaliseCae) => {
        if (grupoAnaliseCae.nuNivelGrupo == null) {
          this.listaGrupoAnaliseCae.push({
            label: grupoAnaliseCae.noGrupoAnaliseCae,
            value: grupoAnaliseCae
          });
          this.formataNomeGrupo();
        }
      });
      this.inicializarListaGrupoAnaliseCae();      // <-- call function here
    });
}


0 commentaires

0
votes

Je suppose que vos valeurs initiales (pushvalues) provenaient d'un service HTTP qui peut prendre un certain temps pour résoudre. Vous recherchez essentiellement un état ici, ce qui signifie que vous devez connaître l'état du formulaire avant de corriger le correctif. Si tel est le cas, vous pouvez utiliser un comportemortosubject code> ou juste une variable normale pour suivre l'état si le formulaire est prêt à être corrigé ou non.

iniciarDadosVisualizar() {
    if(this.isFormInitialized && this.isVisualizando || this.isEdit){
    ... // other logic
};


0 commentaires

0
votes

La première méthode est asynchrone et ne retourne rien qui est le problème. Au lieu de vous abonner à l'intérieur de cette méthode, vous devez retourner l'observable. Ensuite, dans NgAfterViewInit Code> Vous pouvez y souscrire et appeler la 2e méthode lorsqu'il est terminé.

Je ne sais pas si vous devez retourner quelque chose dans votre observable pour l'autre, donc Observable code> ou un rendement différent peut être plus approprié. P>

La nouvelle méthode de la nouvelle push p> xxx pré>

nouveau NgAfterViewInit P>

ngAfterViewInit(): void {
        this.inicializarListaGrupoAnaliseCae().subscribe(() => {
          this.iniciarDadosVisualizar();
          //this.iniciarSituacaoCadastro();
          this.cdr.detectChanges();
        });
        
    }


0 commentaires