Angular 角度5:如何在不同的组件中使用一个表单组?
下面的问题是关于角5的Angular 角度5:如何在不同的组件中使用一个表单组?,angular,angular5,angular-forms,Angular,Angular5,Angular Forms,下面的问题是关于角5的 我有一个表单组件MyForm.form.ts,它显示在多个父组件中。但是,有两个表单控件(我们称之为代理机构电子邮件和交付详细信息),只需要在两个父表单中显示,并且只需要在显示时进行验证。如何实现这一点?您必须从父级传递要显示的表单控件。然后在表单中组件OnChange钩子中,根据来自父级的输入,您可以更新验证 ngOnChanges(changes: SimpleChanges) { if (changes.availableOptions) {
我有一个表单组件
MyForm.form.ts
,它显示在多个父组件中。但是,有两个表单控件(我们称之为代理机构电子邮件
和交付详细信息
),只需要在两个父表单中显示,并且只需要在显示时进行验证。如何实现这一点?您必须从父级传递要显示的表单控件。然后在表单中
组件OnChange
钩子中,根据来自父级的输入,您可以更新验证
ngOnChanges(changes: SimpleChanges) {
if (changes.availableOptions) {
if (this.availableOptions.agency_email) {
this.form.get("agency_email").setValidators([Validators.required]);
} else {
this.form.get("agency_email").setValidators([]);
}
this.form.get("agency_email").updateValueAndValidity();
if (this.availableOptions.delivery_details) {
this.form.get("delivery_details").setValidators([Validators.required]);
} else {
this.form.get("delivery_details").setValidators([]);
}
this.form.get("delivery_details").updateValueAndValidity();
}
}
在表单
组件中声明一个@Input
,以捕获要显示的可用firmControl
@Input() availableOptions: any = {
agency_email: true,
delivery_details: true
};
然后在OnChange
中根据输入更新验证
ngOnChanges(changes: SimpleChanges) {
if (changes.availableOptions) {
if (this.availableOptions.agency_email) {
this.form.get("agency_email").setValidators([Validators.required]);
} else {
this.form.get("agency_email").setValidators([]);
}
this.form.get("agency_email").updateValueAndValidity();
if (this.availableOptions.delivery_details) {
this.form.get("delivery_details").setValidators([Validators.required]);
} else {
this.form.get("delivery_details").setValidators([]);
}
this.form.get("delivery_details").updateValueAndValidity();
}
}
并使用html
中的availableOptions
来显示/隐藏表单控件
下面是一个示例。表单组件在使用它的地方被实例化。如果在两个不同的位置使用同一构件,则它是两个实例。只要你给它不同的表单组,它们就不会相互干扰。好吧,但问题是,有一个表单组,代表表单,在这个组中有控件,这需要有条件地验证。使用ngIf来连续显示其中一个?@EmilAvramov,问题是什么?条件验证意味着您的验证函数有+1个条件。。。。在这里,我做了一个示意图来说明我的意思。MyForm.Form.ts
中必须有什么内容才能激活该按钮?