我正在使用 Angular 的新信号功能来管理表单中的反应状态。
大多数情况下一切正常。但是,我遇到了一个问题:
当用户在表单上刷新页面时,组件会重新加载。表单所需的数据会被异步获取,并通过 暴露出来Signal
。但表单在信号获取值之前就已经初始化了。
因此,当我调用form.patchValue(...)
during 时ngOnInit
,信号的值仍然是undefined
。
我还考虑过使用 effect() 在信号改变时主动更新表单,但根据 Angular 文档,effect() 并不适用于这种逻辑。
// user userApplication Component
get customer(): Signal<Customer | null> {
return this._store.customer;
}
// form Component
ngOnInit(): void {
const customer = this.userApplication.customer();
if (customer && customer.identity) {
const identity = customer.identity;
this.identity.patchValue({
title: identity.title,
firstName: identity.firstName,
});
}
}
identity = inject(FormBuilder).group({
title: new FormControl<string | null>(null),
firstName: new FormControl<string>('', [Validators.required]),
});