我正在尝试检测使用反应形式构建的一个特定表单元素的更改。
我使用*ngFor
和*ngSwitch
指令构建了一个反应式表单,如https://angular.io/docs/ts/latest/cookbook/dynamic-form.html#中所示。我的表单目前包含输入类型text
和file
。我使用change事件来捕获文件上载任务,因此我需要检测file
输入元素中的更改,而不是text
输入元素。这是我遇到问题的地方。使用*ngSwitch
或*ngIf
构建的表单似乎不会触发change
事件。我创建了一个plunker,可用于重新创建我面临的问题。
如果我检测到每个表单元素中的更改,则表单正常工作。 (plunker示例中的form2)
请参阅以下链接中的plunker,了解我面临的问题。 https://plnkr.co/edit/1dMfn7gmR3rHq6xcgr2a?p=preview
有谁知道如何解决这个问题?
答案 0 :(得分:4)
如果您使用rxjs,这应该可行;
this.form1.controls['image1'].valueChanges.subscribe((data) => {
console.log(data);
});
在创建ngOnInit
表单组后,将此代码放入form1
方法中。只要image1
的值发生变化,订阅者就会记录data
。
修改强>
由于类型为file
的输入值从未改变,因此您无法按照我的说法观察更改,对不起。
在plunker中,所有控件类型的表单元素都是textbox
。这就是为什么只在一个元素中编写(change)
时无法触发事件的原因。因为您的switch case基于控件类型,并且所有表单元素的控件类型都是textbox
。将类型为file
的输入的控制类型从textbox
更改为file
。