Ionic 3 - 无效时更改输入和标签的颜色

Ionic 3 - Change color of Input and Label when Invalid

如何更改 "ion-label""ion-input"(底部边框)的颜色当 FormControl 无效时?像这样:

字段有效:

字段无效:

<ion-content>

  <form (ngSubmit)="save(f)" #f="ngForm">

     <ion-item>
        <ion-label stacked>City:</ion-label>
        <ion-input [(ngModel)]="object.city" name="city" required></ion-input>
     </ion-item>

  </form>

</ion-content>

您可以使用离子输入的颜色属性

basics colors

 <ion-item>
    <ion-label stacked>City:</ion-label>
    <ion-input [(ngModel)]="object.city" name="city" color="cityInputColor()" required></ion-input>
 </ion-item>

和ts文件:

public cityInputColor(): string {
  ...
  return cityClass
}

您可以使用 formBuilder 实现类似的目的:

在您的模板代码中:

<ion-header>
  <ion-navbar>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>

<ion-content>


  <form [formGroup]="cityForm">

    <ion-item>
      <ion-label stacked [color]="cityForm.controls.cityname.valid? 'primary':'danger'">City:</ion-label>
      <ion-input type="text" formControlName="cityname" placeholder="type in"></ion-input>
    </ion-item>

  </form>


</ion-content>

在你的 ts 代码中:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  cityForm: FormGroup;

  constructor(public navCtrl: NavController, private formBuilder: FormBuilder) {

    this.cityForm = this.formBuilder.group({
            cityname: ['', Validators.compose([Validators.pattern('^[a-zA-Z0-9\-\_]{3,20}$'), Validators.required])]
          });

  }

}

演示:https://stackblitz.com/edit/ionic-slyodb

你可以这样做。

HTML

<form [formGroup]="todo" (ngSubmit)="logForm()">
    <ion-item>
        <ion-label [color]="color" floating>Todo</ion-label>
        <ion-input formControlName="title" [ngStyle]="{'border-bottom':error}"></ion-input>
    </ion-item>
    <button ion-button type="submit">Submit</button>
</form>

TS

 private todo: FormGroup;
 color = "gray";
 error = '';

 constructor(private formBuilder: FormBuilder) {
    this.todo = this.formBuilder.group({
      title: ["", Validators.required]
    });
  }

  logForm() {
    if (this.todo.invalid) {
      this.color = "danger";
      this.error = '1px solid red';
    } else {
      this.color = 'gray';
      this.error = '';
    }
    console.log(this.todo);
  }

演示:https://stackblitz.com/edit/validate-ion-inputs

我是这样解决问题的:

<ion-item [class.invalid]="f.controls.city?.invalid">
   <ion-label stacked>City:</ion-label>
   <ion-input [(ngModel)]="object.city" name="city" required></ion-input>
</ion-item>

和:

.item.item-md.invalid:not(.input-has-focus):not(.item-input-has-focus) .label.label-md {
    color: #f53d3d; 
}
.item.item-md.invalid:not(.input-has-focus):not(.item-input-has-focus) .item-inner {
    border-bottom-color: #f53d3d;
}

要更改验证文本消息的颜色,请使用如下所示的标签:

<span class="error ion-padding" *ngIf="isSubmitted && errorControl.name.errors?.required"> <ion-label color="danger">Name is required.</ion-label> </span>