Angular 6 提交验证
Angular 6 validation on submit
我有一种情况,我只需要在提交后验证字段。
因为我有一个非常大的表单,其中包含 FormArrays 和 FormGroup,所以我将表单分成多个组件,以便每个组件代表一个组。
此外,我有一个通用组件,用于轻松创建输入 + 验证消息。
但是,Angular 确实会在您输入后立即验证表单,并且没有在提交后开始验证的默认选项。
解决方案 #1
首先也是非常容易使用的是在父组件上有一些 属性 例如submitted = false
当用户提交表单时变为 true
(手动)。然后将它向下传递,直到它通过大量 @Input()
到达我的通用输入组件。然后我不得不使用它并在ngIf
中使用它作为显示错误的额外条件。
解决方案 #2
我是在思考 Material Angular 输入和他们的自定义验证匹配器之后才想到的。我去了源代码,发现在构造函数中传递了基础 class NgForm
和 FormGroupDirective
。过了一会儿,我意识到这是一个依赖注入(在 Angular 中有可能在 dependency injection 的帮助下向上导航树)因此我想出了可以使用 DI 获取 FormGroupDirective/NgForm 其中有 submitted
属性。因此,我们可以在通用输入组件中只有submitted
属性 。并更新为
constructor(
@Optional() private form: NgForm,
@Optional() private group: FormGroupDirective,
) { }
ngOnInit() {
this.group.ngSubmit.subscribe(e => {
this.submittd = this.group.submitted || this.form.submitted;
});
}
我创建了一个小示例,让您了解如何跟踪 属性。
首先,打开控制台并查看初始 FormGroupDirective 状态。
按钮 Funny button
仅在控制台打印 NgForm 和 FormGroupDirective 的当前状态。
其次,按下提交按钮。 ngSubmit 事件被触发并被成功跟踪。然后按 Funny button
并查看更新后的 submitted
状态(在 FormGroupDirective 上)。
还有一个示例,但带有错误消息 + 输入颜色指示器。
StackBlitz删除值就可以了,然后点击"Submit"查看。
正如您在 this 文章中看到的那样,您可以执行以下操作:
this.login = new FormGroup({
email: new FormControl(),
password: new FormControl()
}, { updateOn: 'submit' });
我有一种情况,我只需要在提交后验证字段。
因为我有一个非常大的表单,其中包含 FormArrays 和 FormGroup,所以我将表单分成多个组件,以便每个组件代表一个组。 此外,我有一个通用组件,用于轻松创建输入 + 验证消息。
但是,Angular 确实会在您输入后立即验证表单,并且没有在提交后开始验证的默认选项。
解决方案 #1
首先也是非常容易使用的是在父组件上有一些 属性 例如submitted = false
当用户提交表单时变为 true
(手动)。然后将它向下传递,直到它通过大量 @Input()
到达我的通用输入组件。然后我不得不使用它并在ngIf
中使用它作为显示错误的额外条件。
解决方案 #2
我是在思考 Material Angular 输入和他们的自定义验证匹配器之后才想到的。我去了源代码,发现在构造函数中传递了基础 class NgForm
和 FormGroupDirective
。过了一会儿,我意识到这是一个依赖注入(在 Angular 中有可能在 dependency injection 的帮助下向上导航树)因此我想出了可以使用 DI 获取 FormGroupDirective/NgForm 其中有 submitted
属性。因此,我们可以在通用输入组件中只有submitted
属性 。并更新为
constructor(
@Optional() private form: NgForm,
@Optional() private group: FormGroupDirective,
) { }
ngOnInit() {
this.group.ngSubmit.subscribe(e => {
this.submittd = this.group.submitted || this.form.submitted;
});
}
我创建了一个小示例,让您了解如何跟踪 属性。
首先,打开控制台并查看初始 FormGroupDirective 状态。
按钮 Funny button
仅在控制台打印 NgForm 和 FormGroupDirective 的当前状态。
其次,按下提交按钮。 ngSubmit 事件被触发并被成功跟踪。然后按 Funny button
并查看更新后的 submitted
状态(在 FormGroupDirective 上)。
还有一个示例,但带有错误消息 + 输入颜色指示器。 StackBlitz删除值就可以了,然后点击"Submit"查看。
正如您在 this 文章中看到的那样,您可以执行以下操作:
this.login = new FormGroup({
email: new FormControl(),
password: new FormControl()
}, { updateOn: 'submit' });