离子输入验证(ng-无效)/控制保持 ng-未触及 - 必须取消选择两次
ion-input Validation (ng-invalid) / Control Remains ng-untouched - Have to Deselect Twice
我正在将 Angular
响应式表单应用于空白 Ionic
项目。我的模板使用 OOTB ion-input
组件,如文档中所述。默认情况下,无效用户输入的视觉指示器是此元素底部的红色边框 - 通过 ng-invalid
class:
的 CSS
规则设置
出于我不知道的原因,我必须 select 和 deselect 控制两次触发所需的行为。为什么?
另一方面,验证器似乎立即意识到输入的值无效。为什么 ion-input
没有发生这种情况,我怎样才能以不太老套的方式在第一个 deselect 上获得红色边框?
export class HomePage {
formGroup : FormGroup;
get name() { return this.formGroup.get('name'); }
constructor(public formBuilder: FormBuilder) {
this.formGroup = this.formBuilder.group({
name: ['', [Validators.required, Validators.minLength(2), Validators.maxLength(30)]]
});
}
}
模板:
<form [formGroup]="formGroup">
<ion-item>
<ion-label floating>Name</ion-label>
<ion-input type="text" formControlName="name"></ion-input>
</ion-item>
<p *ngIf="name.errors?.required && name.touched" class='text-danger'>Name field is required</p>
<p *ngIf="name.errors?.minlength" class='text-danger'>Name must be at least 2 characters</p>
<p *ngIf="name.errors?.maxlength" class='text-danger'>Name must be less than 30 characters</p>
</form>
我的离子版本是:ionic-angular 3.9.5
,不需要的行为:
检查了输入并发现了问题。
这是您的页面结构,离子项目:
边框来自.item-inner
div。选择器是
.item-md.item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .item-inner
第一次点击时,<ion-item>
的类是
item item-block item-md item-input item-label-floating ng-untouched ng-pristine ng-invalid
第二次,他们是
item item-block item-md item-input item-label-floating ng-pristine ng-invalid ng-touched
如您所见,在第一次点击时,该项目仍然是 untouched
。选择器要求 touched
控件。
虽然我不知道为什么会这样,但我可以肯定的告诉你,这是一个Ionic错误。我不知道如何解决它,除非通过
明确地将其标记为已触及
(focus)="formGroup.get('name').markAsTouched()"
我正在将 Angular
响应式表单应用于空白 Ionic
项目。我的模板使用 OOTB ion-input
组件,如文档中所述。默认情况下,无效用户输入的视觉指示器是此元素底部的红色边框 - 通过 ng-invalid
class:
CSS
规则设置
出于我不知道的原因,我必须 select 和 deselect 控制两次触发所需的行为。为什么?
另一方面,验证器似乎立即意识到输入的值无效。为什么 ion-input
没有发生这种情况,我怎样才能以不太老套的方式在第一个 deselect 上获得红色边框?
export class HomePage {
formGroup : FormGroup;
get name() { return this.formGroup.get('name'); }
constructor(public formBuilder: FormBuilder) {
this.formGroup = this.formBuilder.group({
name: ['', [Validators.required, Validators.minLength(2), Validators.maxLength(30)]]
});
}
}
模板:
<form [formGroup]="formGroup">
<ion-item>
<ion-label floating>Name</ion-label>
<ion-input type="text" formControlName="name"></ion-input>
</ion-item>
<p *ngIf="name.errors?.required && name.touched" class='text-danger'>Name field is required</p>
<p *ngIf="name.errors?.minlength" class='text-danger'>Name must be at least 2 characters</p>
<p *ngIf="name.errors?.maxlength" class='text-danger'>Name must be less than 30 characters</p>
</form>
我的离子版本是:ionic-angular 3.9.5
,不需要的行为:
检查了输入并发现了问题。
这是您的页面结构,离子项目:
边框来自.item-inner
div。选择器是
.item-md.item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .item-inner
第一次点击时,<ion-item>
的类是
item item-block item-md item-input item-label-floating ng-untouched ng-pristine ng-invalid
第二次,他们是
item item-block item-md item-input item-label-floating ng-pristine ng-invalid ng-touched
如您所见,在第一次点击时,该项目仍然是 untouched
。选择器要求 touched
控件。
虽然我不知道为什么会这样,但我可以肯定的告诉你,这是一个Ionic错误。我不知道如何解决它,除非通过
明确地将其标记为已触及 (focus)="formGroup.get('name').markAsTouched()"