如何检测Angular 2反应/动态形式的一个元素发生的变化?

时间:2016-11-18 12:58:51

标签: angular angular2-forms angular2-changedetection

我正在尝试检测使用反应形式构建的一个特定表单元素的更改。

我使用*ngFor*ngSwitch指令构建了一个反应式表单,如https://angular.io/docs/ts/latest/cookbook/dynamic-form.html#中所示。我的表单目前包含输入类型textfile。我使用change事件来捕获文件上载任务,因此我需要检测file输入元素中的更改,而不是text输入元素。这是我遇到问题的地方。使用*ngSwitch*ngIf构建的表单似乎不会触发change事件。我创建了一个plunker,可用于重新创建我面临的问题。

如果我检测到每个表单元素中的更改,则表单正常工作。 (plunker示例中的form2)

请参阅以下链接中的plunker,了解我面临的问题。 https://plnkr.co/edit/1dMfn7gmR3rHq6xcgr2a?p=preview

有谁知道如何解决这个问题?

1 个答案:

答案 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