我有一个文本框和一个按钮。文本框输入是一个url,在此示例中,有一种用于验证url格式的方法为 isUrlFormatValid()。
如果 isUrlFormatValid()失败,则文本字段下方将显示一条错误消息,并且该按钮变为被动状态,无法单击。但是我的问题是,第一次加载页面时,此方法的结果自动为false,因此也会直接为空框显示错误消息。
<mat-card class="">
<mat-card-content fxLayout="row wrap" fxLayoutAlign="left" fxLayoutGap="15px">
<div>
<mat-form-field>
<mat-label>Enter link here</mat-label>
<input type="url" matInput [(ngModel)]="domainName">
</mat-form-field>
<mat-error *ngIf="isUrlFormatValid()">
Please enter the link in correct format
</mat-error>
</div>
</mat-card-content>
<div>
<button type="button" id="search" class="" [disabled]="isUrlFormatValid()"
(click)="addClicked()">Add Domain
</button>
</div>
</mat-card>
ts文件中的方法定义为:
isUrlFormatValid() {
const pattern = /^((((https?)(:\/\/))?((www)\.)?)?|mailto:(\w+\.?\w+)\@)([a-z0-9]+\.[a-z0-9]+)+$/;
if (pattern.test(this.domainName)) {
return false;
}
return true;
}
如果我更改ts文件中的行:
if (pattern.test(this.domainName))
收件人:
if (pattern.test(this.domainName) || this.domainName == null)
然后解决了错误消息问题,但是此按钮在启动时可单击,如果我写了些东西,它就可以正常工作,但是当页面第一次加载时,它就变为活动状态。
那我该如何解决这个问题呢?
答案 0 :(得分:3)
您可以在不使用额外功能的情况下实现相同的目的。只需使用一些 template driven form 属性及其 control states ,如下所述。另外,将表单元素包含在
<form>
标记中也是一种好习惯。因此,如果您使用表格,那么您的方案将是-
只需将其添加到您的 组件类 -
public pattern = /^((((https?)(:\/\/))?((www)\.)?)?|mailto:(\w+\.?\w+)\@)([a-z0-9]+\.[a-z0-9]+)+$/;
您的 HTML 为-
<form #f="ngForm" (ngSubmit)="addClicked()">
<mat-card class="">
<mat-card-content fxLayout="row wrap" fxLayoutAlign="left" fxLayoutGap="15px">
<div>
<mat-form-field>
<mat-label>Enter link here</mat-label>
<input type="url" matInput [(ngModel)]="domainName" #url="ngModel" [class.is-invalid]="url.invalid && url.touched"
name="url" [pattern]="pattern" required>
</mat-form-field>
<mat-error *ngIf="url.invalid && (url.dirty || url.touched)">
Please enter the link in correct format
</mat-error>
</div>
</mat-card-content>
<div>
<button type="button" id="search" class="" [disabled]="!f.valid">Add
Domain
</button>
</div>
</mat-card>
</form>