ionic 4 + angular 7 Reactive Form with Validators HTML 呈现问题

ionic 4 + angular 7 Reactive Form with Validators HTML rendering issue

我是 ionic 和 angular 的新手,我正在尝试通过教程学习。

按照有关如何使用 Reactive Forms 制作登录表单的教程,我面临以下问题:当我为 FormControl(输入框)声明验证器时FormBuilder,前端显示一个 javascript 函数呈现在文本框内(代替显示占位符文本)。

下面是控制器代码、视图、我的环境配置以及我在 GUI 上获得的内容。 可能是 version/dependencies 问题?
如何在不破坏所有内容的情况下修复或更新依赖项版本?
或者只是我发现了一个框架错误?

非常感谢。

亲切的问候。


控制器代码:

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
  loginForm: FormGroup;

  constructor(public formBuilder: FormBuilder) {
    this.loginForm = formBuilder.group({
      email: new FormControl(Validators.required),
      password: new FormControl(Validators.compose([
         // no code here and it works fine, if I add a validator it breaks
      ]))
    });
  }

  ngOnInit() {
  }

  login() {
    console.log('email: ' + this.loginForm.value.email);
    console.log('password: ' + this.loginForm.value.password);
  }
}

查看代码:

<ion-header>
    <ion-toolbar>
      <ion-title>login</ion-title>
    </ion-toolbar>
</ion-header>
  
<ion-content padding>

  <form [formGroup]='loginForm'>

    <ion-input class="form-control" formControlName="email" type="text" ></ion-input>

    <ion-input formControlName="password" type="password" ></ion-input>
  
    <ion-button (click)="login()" size="large" expand="block">Login</ion-button>
  
    <ion-button size="large" expand="block" router-direction="forward">Register</ion-button>

  </form>

</ion-content>

离子信息:

Ionic:

   ionic (Ionic CLI)             : 4.10.2
   Ionic Framework               : @ionic/angular 4.1.1
   @angular-devkit/build-angular : 0.13.5
   @angular-devkit/schematics    : 7.2.4
   @angular/cli                  : 7.3.5
   @ionic/angular-toolkit        : 1.4.0

System:

   NodeJS : v10.15.1 (C:\Program Files\nodejs\node.exe)
   npm    : 6.4.1
   OS     : Windows 7

输入框内呈现的代码

function (control) {
   return isEmptyInputValue(control.value) ? { 'required': true } : null;
}

请将此行 password: new FormControl(Validators.compose([])) 更改为 password: new FormControl()password: new FormControl(Validators.required)

我不确定它在 Ionic 中是如何完成的,但 Iconic 确实使用了 Angular,所以这可行。

password: new FormControl('Default Value', [Validators.compose([Validator.required]))

您应该执行以下操作:

this.loginForm = this.formBuilder.group({
  email    : ["", Validators.compose([Validators.required])],
  password : ["", Validators.compose([Validators.required])]
})

在此处查看指南:

https://angular.io/guide/reactive-forms#step-2-making-a-field-required