FormGroup
是 Angular 的响应式表单模块中的一个类,用于表示表单控件的一个分组。它包含了一组 FormControl
实例,并提供了验证、状态管理等功能。@Input
是 Angular 中的一个装饰器,用于在组件之间传递数据。
FormGroup
提供了响应式表单的功能,使得表单控件的状态(如是否有效、是否脏等)可以实时更新。FormGroup
提供了丰富的 API,使得单元测试变得更加容易。FormGroup
可以嵌套使用,可以方便地构建复杂的表单结构。FormGroup
是 AbstractControl
的一个子类,主要类型包括:
FormControl
:表示单个表单控件。FormGroup
:表示一组表单控件。FormArray
:表示一组动态数组形式的表单控件。FormGroup
常用于构建复杂的表单,特别是在需要嵌套表单控件的情况下。例如,一个注册表单可能包含用户名、密码、邮箱等多个字段,这些字段可以分组到一个 FormGroup
中。
在 Angular 中,单元测试 FormGroup
作为 @Input
传递的情况,可以使用 TestBed
和 fakeAsync
等工具来模拟组件的输入和输出。
假设我们有一个组件 MyComponent
,它接收一个 FormGroup
作为 @Input
:
// my-component.component.ts
import { Component, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-my-component',
template: `<div *ngIf="formGroup">{{ formGroup.value | json }}</div>`
})
export class MyComponent {
@Input() formGroup: FormGroup;
}
我们可以编写一个单元测试来测试这个组件:
// my-component.component.spec.ts
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ReactiveFormsModule } from '@angular/forms';
import { MyComponent } from './my-component.component';
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ MyComponent ],
imports: [ ReactiveFormsModule ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
const formGroup = new FormGroup({
username: new FormControl('testUser'),
email: new FormControl('test@example.com')
});
component.formGroup = formGroup;
fixture.detectChanges();
});
it('should display form group values', () => {
const element = fixture.nativeElement.querySelector('div');
expect(element.textContent).toContain('{"username":"testUser","email":"test@example.com"}');
});
});
FormGroup
没有正确显示?原因:
FormGroup
没有正确传递给组件。FormGroup
。解决方法:
FormGroup
:// parent.component.ts
import { Component } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
@Component({
selector: 'app-parent',
template: `<app-my-component [formGroup]="formGroup"></app-my-component>`
})
export class ParentComponent {
formGroup: FormGroup;
constructor(private fb: FormBuilder) {
this.formGroup = this.fb.group({
username: [''],
email: ['']
});
}
}
FormGroup
:<!-- my-component.component.html -->
<div *ngIf="formGroup">{{ formGroup.value | json }}</div>
通过以上步骤,可以确保 FormGroup
正确传递并显示在组件中。
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云