面试题答案
一键面试在Angular响应式表单中,可以通过FormGroup
和FormControl
来创建包含多个表单控件的表单组,并设置初始值和验证器。以下是具体步骤和代码示例:
- 引入必要的模块:在
app.module.ts
中引入ReactiveFormsModule
。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform - browser';
import { ReactiveFormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, ReactiveFormsModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
- 在组件中创建表单组:在组件的
ts
文件中,导入FormGroup
和FormControl
,并创建表单组。
import { Component } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'app - root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
myForm: FormGroup;
constructor() {
this.myForm = new FormGroup({
username: new FormControl('defaultUsername', [Validators.required]),
email: new FormControl('defaultEmail@example.com', [Validators.required, Validators.email]),
age: new FormControl(18, [Validators.required, Validators.min(18)])
});
}
}
在上述代码中:
myForm
是一个FormGroup
实例。username
、email
和age
是FormControl
实例,作为myForm
的子控件。defaultUsername
、defaultEmail@example.com
和18
分别是username
、email
和age
的初始值。Validators.required
、Validators.email
和Validators.min(18)
分别是为控件设置的验证器。
- 在模板中使用表单:在
app.component.html
中使用formGroup
指令来绑定表单。
<form [formGroup]="myForm">
<div>
<label for="username">Username:</label>
<input type="text" id="username" formControlName="username">
<div *ngIf="myForm.get('username')?.hasError('required') && (myForm.get('username')?.touched || myForm.get('username')?.dirty)">
Username is required.
</div>
</div>
<div>
<label for="email">Email:</label>
<input type="email" id="email" formControlName="email">
<div *ngIf="myForm.get('email')?.hasError('required') && (myForm.get('email')?.touched || myForm.get('email')?.dirty)">
Email is required.
</div>
<div *ngIf="myForm.get('email')?.hasError('email') && (myForm.get('email')?.touched || myForm.get('email')?.dirty)">
Please enter a valid email.
</div>
</div>
<div>
<label for="age">Age:</label>
<input type="number" id="age" formControlName="age">
<div *ngIf="myForm.get('age')?.hasError('required') && (myForm.get('age')?.touched || myForm.get('age')?.dirty)">
Age is required.
</div>
<div *ngIf="myForm.get('age')?.hasError('min') && (myForm.get('age')?.touched || myForm.get('age')?.dirty)">
Age must be at least 18.
</div>
</div>
<button type="submit">Submit</button>
</form>
在上述模板中:
formGroup
指令绑定到组件中的myForm
。formControlName
指令将每个输入框与对应的FormControl
关联。- 使用
ngIf
指令根据控件的验证状态显示错误信息。