1

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

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

如果我检测到每个表单元素的变化,表单就可以正常工作。(在 plunker 示例中的 form2)

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

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

4

1 回答 1

4

如果您使用 rxjs,这应该可以工作;

this.form1.controls['image1'].valueChanges.subscribe((data) => {
     console.log(data);
});

ngOnInit创建form1表单组后将此代码放入方法中。每当值image1更改时,订阅者都会记录data.

编辑

由于 input 的值file永远不会改变,你不能像我说的那样看到变化,很抱歉。

在 plunker 中,所有控件类型的表单元素都是textbox. (change)这就是为什么只写一个元素时不能触发事件的原因。因为您的 switch case 是基于控件类型的,并且所有表单元素的控件类型都是textbox. 将输入的控制类型file从更改textboxfile

于 2016-11-18T14:16:55.123 回答