角度禁用按钮和垫输入错误消息

时间:2018-12-17 13:42:34

标签: javascript html angular angular-material angular-forms

我有一个文本框和一个按钮。文本框输入是一个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) 

然后解决了错误消息问题,但是此按钮在启动时可单击,如果我写了些东西,它就可以正常工作,但是当页面第一次加载时,它就变为活动状态。

那我该如何解决这个问题呢?

1 个答案:

答案 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>