Кнопка углового отключения и сообщение об ошибке ввода мат - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть текстовое поле и кнопка.Ввод текстового поля является URL-адресом, и существует метод для проверки формата URL-адреса, который в этом примере isUrlFormatValid () .

Если isUrlFormatValid () завершается неудачей, то существуетсообщение об ошибке появляется внизу текстового поля, и кнопка становится пассивной и не может быть нажата.Но моя проблема заключается в том, что при первой загрузке страницы результат этого метода автоматически становится ложным, поэтому для пустого поля также появляется сообщение об ошибке.

<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 голосов
/ 17 декабря 2018

Вы можете достичь того же, не используя дополнительную функцию.Просто используйте некоторые атрибуты шаблонной формы атрибуты и состояния управления , как указано ниже.Кроме того, рекомендуется заключать элементы формы в тег <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>
...