gpt4 book ai didi

javascript - 使用 Angular 2 需要两个字段中的一个

转载 作者:太空狗 更新时间:2023-10-29 17:46:45 25 4
gpt4 key购买 nike

我正在尝试创建联系表单。表单如下所示:

<form novalidate [formGroup]="contact" (ngSubmit)="send()">
<p>
<label>Name
<br>
<input type="text" class="input" value="" formControlName="name">
<span class="error">Enter your name</span>
</label>
</p>
<p>
<label>E-mail
<br>
<input type="email" class="input" value="" formControlName="email">
<span class="error">It looks like this email is invalid</span>
</label>
</p>
<p>
<label>Phone
<br>
<input type="text" class="input" value="" formControlName="telefone">
<span class="error">It looks like this phone number is invalid</span>
</label>
</p>
<p>
<label>Message
<br>
<textarea type="text" class="input" value="" formControlName="message"></textarea>
<span class="error">The message can't be empty</span>
</label>
</p>
<p class="submit">
<input type="submit" name="submit" class="bt" value="Send">
</p>
</form>

在此表单中,只有消息、姓名和电子邮件或电话号码字段是必需的。

我正在使用 formBuilder 类,所以这是 TypeScript 代码:

this.contact = this.formBuilder.group({
name: ['', Validators.required],
email: ['', Validators.compose([/*Use custom validador??*/])],
phone: ['', Validators.compose([/*Use custom validador??*/]],
message: ['', Validators.required]
});

我尝试使用自定义验证器作为解决方案,但我找不到解决方案。有什么建议吗?

最佳答案

我创建了一个自定义验证器指令:

import {
FormGroup,
ValidationErrors,
ValidatorFn,
Validators,
} from '@angular/forms';

export const atLeastOne = (validator: ValidatorFn, controls:string[] = null) => (
group: FormGroup,
): ValidationErrors | null => {
if(!controls){
controls = Object.keys(group.controls)
}

const hasAtLeastOne = group && group.controls && controls
.some(k => !validator(group.controls[k]));

return hasAtLeastOne ? null : {
atLeastOne: true,
};
};

要使用它,您只需执行以下操作:

this.form = this.formBuilder.group({
name: ['', Validators.required],
email:[''],
telefone:[''],
message:['', Validators.required],
}, { validator: atLeastOne(Validators.required, ['email','telefone']) });

所以这里需要emailtelefone。如果您将其留空,那么任何具有值的控件都可以,您可以将它与任何类型的验证器一起使用,而不仅仅是 Validators.required

这可以以任何形式重复使用。

关于javascript - 使用 Angular 2 需要两个字段中的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com