IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

[Angular 5] form réactive , quand cette méthode est appellée ?


Sujet :

Angular

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut [Angular 5] form réactive , quand cette méthode est appellée ?
    Bonsoir,
    voici un bout de script auquel j'essaye de comprendre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import { Component, OnInit }                  from '@angular/core';
    import { FormControl, FormGroup, Validators } from '@angular/forms';
     
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit {
      ensembleForm: FormGroup;
      contact = { prenom: '' };
     
      ngOnInit(): void {
        this.ensembleForm = new FormGroup({
          'prenom': new FormControl(this.contact.prenom, [
            Validators.required,
            Validators.minLength(4),
          ])
        });
      }
     
      get prenom() { 
        console.log(this);
        return this.ensembleForm.get('prenom');
       }
     
    }
    Dans ce composant il y a une méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      get prenom() { 
        console.log(this);
        return this.ensembleForm.get('prenom');
       }
    Quand cette méthode est appelé ? On dirait qu'elle est appelé automatiquement d'habitude dans le html on a ce genre d'appel:

    voici mes 3 fichier:
    appmodule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    import { FormsModule, ReactiveFormsModule } from '@angular/forms';
     
    import { AppComponent } from './app.component';
     
     
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        FormsModule,
        ReactiveFormsModule,
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    app.component.html
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <div class="container">
     
      <h1>Reactive Form</h1>
     
      <form [formGroup]="ensembleForm" #formDir="ngForm">
        <div [hidden]="formDir.submitted">
     
          <div class="form-group">
            <label for="name">Name</label>
            <input id="name" class="form-control" formControlName="prenom" required>
     
            <div *ngIf="prenom.invalid && (prenom.dirty || prenom.touched)" class="alert alert-danger">
              <div *ngIf="prenom.errors.required">
                prenom is required.
              </div>
              <div *ngIf="prenom.errors.minlength">
                prenom must be at least 4 characters long.
              </div>
            </div>
          </div>
     
          <button type="submit" class="btn btn-default" [disabled]="ensembleForm.invalid">Submit</button>
          <button type="button" class="btn btn-default" (click)="formDir.resetForm({})">Reset</button>
        </div>
      </form>
     
      <div class="submitted-message" *ngIf="formDir.submitted">
        <p>You've submitted your hero, {{ ensembleForm.value.prenom }}!</p>
        <button (click)="formDir.resetForm({})">Add new hero</button>
      </div>
    </div>


    app.component.ts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import { Component, OnInit }                  from '@angular/core';
    import { FormControl, FormGroup, Validators } from '@angular/forms';
     
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit {
      ensembleForm: FormGroup;
      contact = { prenom: '' };
     
      ngOnInit(): void {
        this.ensembleForm = new FormGroup({
          'prenom': new FormControl(this.contact.prenom, [
            Validators.required,
            Validators.minLength(4),
          ])
        });
      }
     
      get prenom() { 
        console.log(this);
        return this.ensembleForm.get('prenom');
       }
     
    }
    Dans le code je ne trouve null pas une ligne qui indique de récupérer "prénom",
    voici ce que donne console.log(this)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    Object { contact: Object, ensembleForm: Object } app.component.ts:26:13
    voici ce que contient l'objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prenom:""
    __proto__:object
    Pourquoi on a 6 lignes identiques ?
    merci de vos réponses

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Points : 169
    Points
    169
    Par défaut
    Bonjour,
    Les lignes sont identiques car l'objet ne change pas : this référence le component.
    Pourquoi 6 lignes ? Parce que le moteur d'Angular appelle 6 fois le getter pour générer le dom, par exemple pour évaluer l'expression : "prenom.invalid"

Discussions similaires

  1. Réponses: 81
    Dernier message: 11/03/2013, 08h44
  2. Réponses: 72
    Dernier message: 05/02/2011, 18h16
  3. [PHP 5.3] Savoir quelle méthode est appelée via le constructeur
    Par Madfrix dans le forum Langage
    Réponses: 14
    Dernier message: 19/10/2010, 16h45
  4. Où est le problème dans cette méthode ?
    Par Stéphane Bruckert dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 19/03/2009, 17h00
  5. [MySQL] est ce que cette méthode est juste
    Par info_sara dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 13/06/2008, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo