【发布时间】:2018-10-18 13:58:08
【问题描述】:
我正在为我们的一个项目在 UI 中设置表单验证。其中一个文本框需要有一个不同的验证pattern 基于对上一个下拉列表的选择。例如,如果下拉选择是name,则模式应该是:
pattern='[a-zA-Z ]+'
哪里好像是number,应该是:
pattern='[0-9 ]+`
我在组件中设置了一个函数来根据该选择设置验证字符串:
fields: string[] = [];
validationPattern: string;
private validationType(field: string[]) {
if (field.includes('number')) {
this.validationPattern = '[0-9]+';
return this.validationPattern;
} else if (field.includes('name')) {
this.validationPattern = '[a-zA-Z1-9][a-zA-Z0-9 ]+';
return this.validationPattern;
}
}
在 HTML 中,我有以下内容。 setField 是一个实际选择字段的函数; validationType 是我试图用来为输入创建验证模式的内容:
<div ngbDropdownMenu>
<button
*ngFor="let selected of fields"
class="dropdown-item"
(click)="setField(selected); validationType(selected)">
{{ selected }}
</button>
</div>
这是表单验证的输入:
<input
type="text"
id="value"
name="value"
placeholder="Value"
#value1="ngModel"
pattern=this.validationPattern
[(ngModel)]="profile.value">
到目前为止我有两个问题:
如何正确地将validationPattern 变量的值或validationType() 函数的输出传递给输入中的模式?截至目前,它似乎将
this.validationPattern视为实际模式——即this.validationPattern一词而不是相关值。无论我选择姓名还是号码,我输入的任何内容都是无效的。如何在点击之外使用validationType()?有人告诉我,将多个函数关联到(单击)是非常糟糕的做法,在这种特殊情况下,它应该保留给 setField()。
【问题讨论】:
标签: javascript html angular validation angular5