【发布时间】:2022-07-01 18:04:12
【问题描述】:
我只是在玩新的 angular typed forms api,如果不声明特定的“FormInterface”女巫必须与原来的匹配,我无法弄清楚如何输入FormGroup。
也许我遗漏了一些东西,或者根本不可能这样做。
我能够让事情正常工作(下面的示例),但我不喜欢这里的是 UserForm 接口女巫的声明没有引用 User 接口并且必须是它但带有FormControl<> 字段。
在这种情况下是否可以仅使用User 接口输入FormGroup?。
stackblitz 上提供了完整的工作示例
user.model.ts
export interface User {
firstName: string;
lastName: string;
email: string;
age: number | null;
}
user.service.ts
@Injectable()
export class UserService {
add(user: User): void {
console.log('Add user', user);
}
}
app.component.ts
interface UserForm {
firstName: FormControl<string>;
lastName: FormControl<string>;
email: FormControl<string>;
age: FormControl<number | null>;
}
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
})
export class AppComponent implements OnInit {
form: FormGroup<UserForm>;
constructor(private userService: UserService) {}
ngOnInit(): void {
this.form = new FormGroup({
firstName: new FormControl<string>('', { nonNullable: true }),
lastName: new FormControl('', { nonNullable: true }),
email: new FormControl('', { nonNullable: true }),
age: new FormControl<number | null>(null),
});
}
submitForm(): void {
this.userService.add(this.form.getRawValue());
}
}
【问题讨论】:
-
我们在 Angular 团队听到你的声音。我们正在考虑在未来的 Angular 版本中减少样板文件数量的方法。现在,您必须声明一个使用控件的单独接口。另一种选择是在声明站点实例化
FormGroup,而不是构造函数,并依靠类型推断自动推断类型。
标签: angular strong-typing angular14