У меня есть текстовое поле и кнопка. Ввод текстового поля - это 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)
тогда проблема с сообщением об ошибке решена, но на этот раз кнопка становится кликабельной при запуске, если я что-то напишу, да, она работает, но когда страница загружается впервые, она становится активной.
Итак, как я могу решить эту проблему?
You may achieve the same without using an extra function. Just use some template driven form attributes & its control states as mentioned below. Also, It is a good practice to enclose your form elements in a
<form>
tag. So, if you use form, your scenario would be -
Просто добавьте это в свой класс компонента -
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>
теперь он вообще не работает :) как кнопка отключения, так и сообщение об ошибке. кнопка всегда активна, и сообщение об ошибке появляется все время.
он работает, но теперь кнопка активна, когда текстовое поле ввода пусто.
тогда просто добавление required
на входе поможет
Проблема решена. большое спасибо, чувак. с вашим ответом я также избавлюсь от лишней работы по проверке формата в файле компонента.
Можете ли вы также проверить мой вопрос? stackoverflow.com/questions/54631830/…. Я использовал ваш код, но мне нужна еще одна дополнительная функция.
Я пробовал, он работает хорошо для отключения кнопок, но не для сообщения об ошибке. с этим кодом сообщение об ошибке появляется все время. и не скрываться, когда формат действителен.