【发布时间】:2016-05-12 21:50:33
【问题描述】:
我有一个使用表单生成器(Angular2 Beta 1,TypoScript)创建的表单,即:constructor 中有这样的内容:
this.form = this._formBuilder.group({
'username': ['', Validators.required],
'email': ['', Validators.required]
});
表格出现了,到目前为止一切都很好。我没有真正了解的是当我从远程服务(或其他一些异步加载机制)加载数据(在本例中为 User 对象)时如何处理绑定。
我尝试过的是:
- 在
constructor或ngOnInit中异步加载数据。问题:甚至在加载开始之前引发异常(“无法读取未定义的属性 'validator' ...”) - 在
constructor或ngOnInit中异步加载数据,但在此之前创建一个空表单。问题:验证不起作用。 - 我期望的工作:将表单数据绑定到
User对象的属性,并设置该对象的属性。问题:也不例外,但表格中没有显示数据。
我想一定有一些更聪明/更好的方法来让它工作?我对 Angular2 比较陌生,所以我希望这个问题不会太愚蠢……
---- 更新----
首先,我忘了提到我在表单中使用了ngFormModel——以防它很重要。
和@Thierry:我认为“与表单绑定的临时空对象”是我尝试做的(上面提到的第三种方法)但没有奏效。准确地说,我试过这个:
constructor(private _formBuilder:FormBuilder) {
this.user = new User;
this.user.username = 'abc';
this.form = this._formBuilder.group({
'username': [this.user.username, Validators.required],
});
}
这会显示用户名,但是当我将设置 this.user.username 的行移到构造函数的末尾时它甚至都不起作用——我觉得这很令人惊讶,因为我希望数据绑定来处理这个问题.
【问题讨论】:
-
您确定临时空对象吗? ;-) 见我的 plunkr:plnkr.co/edit/metUkOB7Sqfyr9DtCLR0?p=preview。即使在数据加载后验证仍然有效...
-
有趣。也许这是“模板驱动”与“模型驱动”Ang2 形式的问题。我使用后一种方法,并且在控件中没有
[(ngModel)]- 这可能是它在这里不起作用的原因吗? -
是的,我也使用模型驱动的方法。如果没有
ngModel,您需要手动设置每个控件的值...ngModel不是这种情况:更新全局对象,每个绑定的属性都会自动更新;-)