Angular:获得对投影 FormGroup 的访问权限
Angular: get access to projected FormGroup
我想创建一个基本表单组件,它将对所有其他表单有额外的控制。
例如,我想检查表单是否变脏,用户何时要关闭表单。
这是我的基本组件表单示例:
@Component({
selector: 'my-modal-form',
templateUrl: './modal-form.component.html',
styleUrls: ['./modal-form.component.scss']
})
export class ModalFormComponent implements OnInit, AfterContentInit {
@ContentChild(FormGroup, { static: false }) usersForm: FormGroup;
constructor() { }
ngOnInit(): void {
console.log(this.usersForm);
}
ngAfterContentInit() {
console.log(this.usersForm);
}
}
这是用法示例:
<my-modal-form>
<form [formGroup]="profileForm">
<input type="text" formControlName="firstName" />
<input type="text" formControlName="lastName" />
</form>
</my-modal-form>
所以两个 console.log
电话都给我 undefined
。在这里,我想访问 FormGroup
实例,这样我就可以检查它是否脏了。
问题是 - 如何正确访问投影表单 (FormGroup)?
你没有在任何地方初始化 usersForm
这就是你被定义的原因。
当我检查你的模板时,你有 profileForm
而不是 usersForm
。
您应该更正此 <form [formGroup]="usersForm">
而不是 <form [formGroup]="profileForm">
改用 ControlContainer
似乎可行*:
Stackblitz
import { Component, ContentChild, OnInit, AfterContentInit } from '@angular/core';
import { ControlContainer, FormGroup } from '@angular/forms'
@Component({
selector: 'modal-form',
template: `
<ng-content></ng-content>
`
})
export class ModalFormComponent implements OnInit, AfterContentInit {
@ContentChild(ControlContainer, { static: true }) formGroup: FormGroup;
constructor() { }
ngOnInit(): void {
console.log(this.formGroup.value); // null
}
ngAfterContentInit() {
console.log(this.formGroup.value); // {firstName: "", lastName: ""}
this.formGroup.valueChanges.subscribe(console.log)
}
}
*警告 - 我没有尝试过这种方法,所以无法评估它的可行性。如果可行的话,也许 OP 可以评论/回答 post 下线?
我想创建一个基本表单组件,它将对所有其他表单有额外的控制。
例如,我想检查表单是否变脏,用户何时要关闭表单。
这是我的基本组件表单示例:
@Component({
selector: 'my-modal-form',
templateUrl: './modal-form.component.html',
styleUrls: ['./modal-form.component.scss']
})
export class ModalFormComponent implements OnInit, AfterContentInit {
@ContentChild(FormGroup, { static: false }) usersForm: FormGroup;
constructor() { }
ngOnInit(): void {
console.log(this.usersForm);
}
ngAfterContentInit() {
console.log(this.usersForm);
}
}
这是用法示例:
<my-modal-form>
<form [formGroup]="profileForm">
<input type="text" formControlName="firstName" />
<input type="text" formControlName="lastName" />
</form>
</my-modal-form>
所以两个 console.log
电话都给我 undefined
。在这里,我想访问 FormGroup
实例,这样我就可以检查它是否脏了。
问题是 - 如何正确访问投影表单 (FormGroup)?
你没有在任何地方初始化 usersForm
这就是你被定义的原因。
当我检查你的模板时,你有 profileForm
而不是 usersForm
。
您应该更正此 <form [formGroup]="usersForm">
而不是 <form [formGroup]="profileForm">
改用 ControlContainer
似乎可行*:
Stackblitz
import { Component, ContentChild, OnInit, AfterContentInit } from '@angular/core';
import { ControlContainer, FormGroup } from '@angular/forms'
@Component({
selector: 'modal-form',
template: `
<ng-content></ng-content>
`
})
export class ModalFormComponent implements OnInit, AfterContentInit {
@ContentChild(ControlContainer, { static: true }) formGroup: FormGroup;
constructor() { }
ngOnInit(): void {
console.log(this.formGroup.value); // null
}
ngAfterContentInit() {
console.log(this.formGroup.value); // {firstName: "", lastName: ""}
this.formGroup.valueChanges.subscribe(console.log)
}
}
*警告 - 我没有尝试过这种方法,所以无法评估它的可行性。如果可行的话,也许 OP 可以评论/回答 post 下线?