我有一个名为productionControlValidator
的自定义验证器函数。
如果我像这样设置表单,一切都工作了:
this.validTest = new FormGroup({
isdrawing: new FormControl(true),
inventoryControl: new FormControl(null)
}, { validators: productionControlValidator });
但是,如果我使用这样的表单生成器设置表单:
this.validTest = this.fb.group({
isdrawing: true,
inventoryControl: null
}, { validators: productionControlValidator });
如果构造函数中将fb
定义为private fb:FormBuilder
,则验证不起作用。所谓“不工作”,我的意思是表单的valid属性不正确,在控制台中我看不到预期的输出(使用第一个方法显示)。
我没有在第二个方法中正确定义验证器(如果是这样的话,应该如何定义它),或者FormBuilder有什么东西使自定义验证器不可用?
在formGroup中的value更改时触发窗体验证。
下面是一个示例:反应式表单自定义验证器
一旦更改表单的值,我们就可以触发整个表单的表单验证。
下面是示例类:
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
validTest: FormGroup;
hasError = false;
constructor(private fb: FormBuilder) {
}
ngOnInit() {
this.validTest = this.fb.group ({
isdrawing: [true, [Validators.required]],
inventoryControl: ['10', [Validators.required, Validators.pattern('[0-9]*')]]
});
this.validTest.valueChanges.subscribe(form => {
if(form) {
this.productionControlValidator(form);
}
});
}
private productionControlValidator(form) {
// custom validations for form controls
if(form) {
this.hasError = this.validTest.invalid;
}
}
}
html模板示例:
<form [formGroup]="validTest">
<input
type="checkbox"
formControlName="isdrawing"/>
<input
type="text"
formControlName="inventoryControl"
/>
<div *ngIf="hasError">Form contains errors !!!</div>
</form>
对于自定义验证器文档,请尝试使用验证器而不是验证器:https://angular.io/api/forms/AbstractControl#root
(validator validator fn | null)确定此控件同步有效性的函数。
this.validTest = this.fb.group({
isdrawing: true,
inventoryControl: null
}, { validator: productionControlValidator });
更多信息---
在组件中使用自定义验证服务
import {CustomValidationService } from './custom.service'
this.validTest = this.fb.group({
name: [null, [Validators.required, CustomValidationService.nameValidator],
inventoryControl: [null, [CustomValidation]]
});
您可以创建自定义验证服务
,如下所示:
@Injectable()
export class CustomValidationService {
// Name validation
static nameValidator(control: FormControl) {
if (control.value) {
const matches = control.value.match(/^[A-Za-z\s]+$/);
return matches ? null : { 'invalidName': true };
} else {
return null;
}
}
}
问题内容: 我正在使用带有自定义验证的Angular2的FormBuilder开发表单。问题:在customValidator中,我用来访问本地对象。执行验证时出现错误。 看起来customValidator是在其他对象中执行的,因此更改了引用 问题: 如何传递对customValidator 的引用? 问题答案: 使用箭头函数,以确保该函数绑定到此:
现在我正在创建这个表单生成器: 当我收到我正在执行的元素的错误消息时: 显示:键控件:myaccount,键错误:必需,错误值:true 问题是我不想显示“myaccount”,而是要显示“myaccount”。我试图以某种方式做到这一点: 但这是不可能的。我该怎么做呢? 编辑: 我想显示标签(特定的),而不是表单上的值。我想为我的控制台自定义一个特定的名称。日志
问题内容: 我有一个看起来像这样的表格: 它的设置使得输入数据后所有必填字段和“保存”按钮都可以使用。但是,部分验证是,我将使用输入的数据使用$ http通过POST通过服务器访问服务器。 我应该在函数中放置该逻辑还是有一个更好的放置位置? 更新: * 我实现了以下内容,将其作为元素上的属性应用,但它在每次我不喜欢的按键上调用服务器/数据库: 问题答案: 您不需要在指令中发出$ http请求,更好
我有问题得到反应角色的工作与自定义表情符号。如果我使用不和谐表情符号,它会嵌入消息,创建反应,并在点击反应时应用角色。 然而,如果我使用一个自定义的emoji,它会嵌入消息并创建正确的反应,但是它不提供当emoji被点击时的角色。 我使用了相同的编码,当交换不和谐和自定义的表情符号,唯一的改变是表情符号的ID。 我使用的完整代码是: 我们将非常感谢对此提供任何帮助。
让我们假设使用相同的登录表单,但现在我们还要测试我们的密码在其中某处有感叹号。 app/login-form.component.ts 一个简单的函数接受实例,并返回null如果一切都很好。 如果测试失败,它返回一个具有任意命名属性的对象。 属性名称将用于.hasError()测试。 app/login-form.component.ts <!-- ... --> <div [hidden]="!
本文向大家介绍Angular2表单自定义验证器的实现,包括了Angular2表单自定义验证器的实现的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍如何判断验证器的结果。在这里,我们就来看看怎样实现一个自定义的验证器。 目标 我们要实现一个验证手机号的验证器,使用的实例还是基于之前的文章里面的实例,也就是用户信息输入的表单页面。我们在手机号的元素上添加一个验证手机号的验证器。然后,如果手