我在我的 Angular 10 应用程序中有一个模板驱动的表单,我正在尝试监听更改,以便我可以向用户显示“已更改,请提交更新”消息。
HTML
<form (ngSubmit)="submit()" class="form-horizontal" #opportunityForm="ngForm">
...
机会.component.ts
export class OpportunityComponent implements OnInit {
@ViewChild('opportunityForm') ngForm: NgForm;
ngOnInit(): void {
...
this.formChangesSubscription = this.ngForm.form.valueChanges.subscribe(x => {
console.log(x);
})
但它得到一个错误:
TypeError: Cannot read property 'form' of undefined
因为 ngForm 没有初始化。这是一个类似的问题:如何监听角度模板驱动的表单更改,在https://ng-run.com/edit/CGoUiw88N7OmI7x0YmHJ有一个运行的答案,它有同样的问题。
在我听取更改之前,如何获取表单并确保它存在?我正在使用 Angular 10.2.0
不确定这是否会有所不同,但整个页面都包含在
<div *ngIf="loaded">
这是在 ngOnInit 中的 api 调用之后设置的
ngOnInit(): void {
this.dataService.getOpportunity(this.id)
.subscribe(data => {
... //fills the data up
}, error => console.error(error),
() => {
console.log(this.loaded);
console.log(this.ngForm);
});
输出 true(对于已加载)和 undefined(对于 this.ngForm)。
更新*
所以看起来确实是因为我只有在数据返回后才加载整个表单。因为它不在页面上,所以 @ViewChild 可以连接到它。我把我的 *ngIf 放在表单内的一个 div 上,它工作正常