Angular fromcontrol值不会以离子5/角度的反应形式更新

Angular fromcontrol值不会以离子5/角度的反应形式更新,angular,ionic-framework,angular-reactive-forms,ionic5,Angular,Ionic Framework,Angular Reactive Forms,Ionic5,这里的问题是HTML和TS文件之间没有绑定。该值不会更新。我确实遵循了一个教程,我遵循了步骤,但它根本不起作用 <form [formGroup]="form" (ngSubmit)="login()"> <input (keyup)="log()" formControlName="kk"> </form> 此代码不断返回{kk:},而不是更新其值。 我的代码怎么了

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

<form [formGroup]="form" (ngSubmit)="login()">
      <input (keyup)="log()" formControlName="kk">
</form>
此代码不断返回{kk:},而不是更新其值。 我的代码怎么了?

保罗

  • 您使用的是哪个版本的爱奥尼亚
  • 任何formGroup的实现都应该在构造函数中,我在代码中没有看到任何
  • 更喜欢使用离子输入(离子成分)而不是输入,这样会更容易处理
  • 下面是我在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)
      }
    } 
    
    从'@angular/forms'导入{FormGroup,FormBuilder,Validators};
    从'luxon'导入{DateTime};
    @组成部分({
    选择器:“app-register2”,
    templateUrl:'./register2.page.html',
    样式URL:['./register2.page.scss'],
    })
    导出类Register2Page实现OnInit{
    报名表格:FormGroup ;;
    不匹配:布尔值
    ageIsValid:boolean
    构造函数(私有firebaseServ:FirebaseServiceService,公共formBuilder:formBuilder){
    this.signUpForm=this.formBuilder.group({
    电子邮件:['',[Validators.required,Validators.email]],
    密码:[''[Validators.required,Validators.minLength(6)],
    确认密码:['',验证器。必需],
    名称:['',需要验证器],
    prenom:['',验证器。必需],
    伪:['',验证器。必需],
    诞生:['',验证器。必填]
    },{validators:[this.passwordMatchValidator,this.ageValidator]});
    this.signUpForm.valueChanges.subscribe(obs=>{
    this.mismatch=this.signUpForm.getError('mismatch'))
    this.ageIsValid=this.signUpForm.getError('ageVerification')
    })
    }
    恩戈尼尼特(){
    }
    passwordMatchValidator(g:FormGroup){
    返回g.get('password')。value==g.get('confirmPassword')。value?null:{'mismatch':true};
    }
    ageValidator(g:FormGroup){
    让naissance=DateTime.fromISO(g.get('naissance').value)
    log(naissance.diffNow(['days','months','years')).as('years'))
    返回naissance.diffNow(['days','month','years'])。作为('years'))
    
    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)
      }
    } 
    
    <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>