繁体   English   中英

fromcontrol 值未使用离子 5 / angular 中的反应性 forms 更新

[英]fromcontrol value is not updated with reactive forms in ionic 5 / angular

这里的问题是 HTML 和 TS 文件之间没有绑定。 该值未更新。 我确实遵循了一个教程,并且遵循了这些步骤,但它根本不起作用。

<form [formGroup]="form" (ngSubmit)="login()">
      <input (keyup)="log()" formControlName="kk">
</form>
export class LoginComponent implements OnInit {

  // form = new FormGroup({
  //   kk: new FormControl(''),
  //   // account: new FormGroup({
  //   //   username: new FormControl('', [
  //   //     Validators.required,
  //   //     Validators.minLength(3),
  //   //     UsernameValidators.cannotContainSpace,
  //   //   ], UsernameValidators.shouldBeUnique),
  //   //   password: new FormControl('', Validators.required)
  //   // })
  // });

  form = new FormGroup({
    kk: new FormControl(''),
  });

  get kk(): AbstractControl {
    return this.form.get('kk');
  }

  log(): void {
    console.log(this.form.value);
  }

  login(): void {
    console.log('login');
  }

  ngOnInit() {
    this.log();
  }
}

此代码不断返回 {kk: ""} 而不是更新其值。 我的代码有什么问题?

保罗,

  1. 您使用的是哪个版本的 Ionic?
  2. 任何 formGroup 的实现都应该在构造函数中,我在您的代码中看不到任何内容。
  3. 比输入更喜欢使用离子输入(离子组件),它会更容易处理。

这是我与 Ionic V5 一起使用的示例: .ts 就像

import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { DateTime } from 'luxon';
@Component({
  selector: 'app-register2',
  templateUrl: './register2.page.html',
  styleUrls: ['./register2.page.scss'],
})
export class Register2Page implements OnInit {
  signUpForm: FormGroup;
  mismatch: boolean
  ageIsValid: boolean

  constructor(private firebaseServ: FirebaseServiceService, public formBuilder: FormBuilder) {
    this.signUpForm = this.formBuilder.group({
      email: ['', [Validators.required, Validators.email]],
      password: ['', [Validators.required,Validators.minLength(6)]],
      confirmPassword: ['', Validators.required],
      nom: ['', Validators.required],
      prenom: ['', Validators.required],
      pseudo: ['', Validators.required],
      naissance: ['', Validators.required]
    }, { validators: [this.passwordMatchValidator, this.ageValidator] });
    this.signUpForm.valueChanges.subscribe(obs => {
      this.mismatch = this.signUpForm.getError('mismatch')
      this.ageIsValid = this.signUpForm.getError('ageVerification')
    })

  }

  ngOnInit() {

  }

  passwordMatchValidator(g: FormGroup) {
    return g.get('password').value === g.get('confirmPassword').value ? null : { 'mismatch': true };
  }
  ageValidator(g: FormGroup) {
    let naissance = DateTime.fromISO(g.get('naissance').value)
    console.log(naissance.diffNow(['days', 'months', 'years']).as('years'))
    return naissance.diffNow(['days', 'months', 'years']).as('years') <= -18 ? null : { 'ageVerification': true };
  }
  signUp() {
    console(this.signUpForm.value)
  }
} 

.html 是:

<ion-header>
  <ion-toolbar>
    <ion-title>Enregistrez-vous pour accéder au site !</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  <form [formGroup]="signUpForm" (ngSubmit)="signUp()">

    <ion-list>
      <ion-item>
        <ion-label position="floating">Email</ion-label>
        <ion-input type="email" formControlName="email"></ion-input>
      </ion-item>

      <ion-item>
        <ion-label position="floating">Mot de Passe</ion-label>
        <ion-input type="password" formControlName="password"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label position="floating">Confirmer le mot de Passe</ion-label>
        <ion-input type="password" formControlName="confirmPassword"></ion-input>

      </ion-item>
      <ion-label color=danger *ngIf="(mismatch==true) && (signUpForm.get('confirmPassword').dirty)">
          Le mot de passe et sa confirmation doivent coïncider.
        </ion-label>
      <ion-item>
        <ion-label position="floating">Nom</ion-label>
        <ion-input type="text" formControlName="nom"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label position="floating">Prénom</ion-label>
        <ion-input type="text" formControlName="prenom"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label position="floating">Pseudo</ion-label>
        <ion-input type="text" formControlName="pseudo"></ion-input>
      </ion-item>
      <ion-item>
        <ion-label position="floating">Date de naissance</ion-label>
        <ion-datetime display-format="DD MM YYYY" picker-format="DD MM YYYY" formControlName="naissance"></ion-datetime>
        <ion-label color=danger *ngIf="(ageIsValid==true) && (signUpForm.get('naissance').dirty)">
          Vous devez être majeur pour ouvrir un compte. Si vous êtes mineur, demandez à vos parents d'en ouvrir un pour
          vous.
        </ion-label>
      </ion-item>
    </ion-list>
    <ion-button expand="full" fill="outline" type="submit" [disabled]="!signUpForm.valid">connexion</ion-button>
  </form>
</ion-content>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM