2
votes

la réinitialisation du formulaire réactif angulaire ne met pas à jour l'option de sélection

J'ai créé une forme angulaire en utilisant materialize-css . Voici le HTML

addFeed(data: any): void {
    console.log(data);

    this.addFeedForm.reset({    departmentId: 0    });
}

Et c'est ainsi que j'ai créé la forme angulaire

this.addFeedForm = new FormGroup({
      departmentId: new FormControl(0,Validators.compose([Validators.required])),
});

Et quand je soumettre Je fais

<form [formGroup]="addFeedForm" (ngSubmit)="addFeed(addFeedForm.value)" class="col s12">
    <div class="row">
        <div class="input-field col m6 s12">
            <select formControlName="departmentId" #feedDepartment>
                <option value=0>General</option>
                <option [value]="department.id" *ngFor="let department of departmentList">{{department.name}}</option>
            </select>
            <label>Department</label>
        </div>

        <div>
            <button type="button" class="btn waves-effect waves-light col s3 offset-s5" (click)="resetAddFeedForm()">Reset</button>

            <button type="submit" [disabled]="!addFeedForm.valid" class="btn waves-effect waves-light col s3 offset-s1">Add</button>

        </div>
    </div>
</form>

Si je change l'option de sélection de département en autre chose et soumets et réinitialise le formulaire en définissant departmentId sur 0 alors " General

"doit être sélectionné dans l'option de sélection.

Il ne se met pas à jour sur l'interface utilisateur mais sur la console, il définit departmentId sur 0.

L'interface utilisateur le comportement est comme entrez la description de l'image ici

sur l'interface utilisateur, l'option sélectionnée est différente mais sur la console departmentId est 0

Mise à jour: Ceci est le stackblitz

https://stackblitz.com/edit/angular-tchftw


2 commentaires

Veuillez fournir un stackblitz minimal présentant votre problème si aucune des réponses existantes ne résout votre problème. Le code que vous avez publié dans votre question semble réinitialiser l'interface correctement: stackblitz.com/edit/angular-4degxv < / a>


Cela a à voir avec le fonctionnement de materialize-css . Checkout stackoverflow.com/q/30341095/9423231 par exemple. La liaison de données bidirectionnelle ne semble pas fonctionner et vous devrez faire beaucoup de choses manuellement. Il peut être plus simple d'utiliser l'encapsuleur Angular Materialize ngx-materialize si l'ensemble de votre interface utilisateur est fait avec se matérialiser.


3 Réponses :


1
votes

mettez à jour votre contrôle de formulaire en utilisant

this.addFeedForm.controls['departmentId'].setValue('0');

Ou vous pouvez également utiliser

 addFeed(data: any): void {
     console.log(data);
     this.addFeedForm.patchValue({departmentId: '0'});
 }


6 commentaires

les deux solutions ne fonctionnent pas: (la même chose sur la sélection de l'interface utilisateur n'est pas mise à jour mais la valeur de departmentId est définie sur 0


lorsque vous définissez la valeur de departmentId pour que cette valeur soit une chaîne car vous affectez une valeur de chaîne à departmentId


les mêmes variables qui ne fonctionnent pas sont mises à jour mais aucune réflexion sur l'option de sélection .. vérifiez l'image que j'ai ajoutée en question


faites votre option puis essayez


@SunilGarg this.addFeedForm.get ('departmentId'). Reset (); essayez ceci stackblitz.com/edit/patch-with-form


il s'agit davantage d'un problème de materialize-css .. à condition que le lien stackblitz en question



0
votes

Essayez de cette façon

addFeed(data: any): void {     
   this.addFeedForm.patchValue({departmentId: [0]});
}

PatchValue fonctionnera toujours pour redéfinir la valeur angulaire. Cela fonctionne toujours pour moi.


2 commentaires

les mêmes variables qui ne fonctionnent pas sont mises à jour mais aucune réflexion sur l'option de sélection


il s'agit davantage d'un problème de materialize-css .. à condition que le lien stackblitz en question



0
votes

mettez le type reset sur le bouton cela fonctionnera:


2 commentaires

stackblitz.com/edit/angular-tchftw .. a également mis à jour la question


Hé, vous devez mettre le type de bouton comme réinitialisé sur la méthode resetAddFeedForm (). ça va marcher.