更新反应形式的所有值后,将在输入上调用什么事件

What event will be called on input AFTER all values of reactive forms are updated

Angular(v.5 或 v.6)在 反应形式的特定输入更改后发出事件的正确方法是什么?

这个方法我已经试过了:

  1. (ngModelChange)="doSomething($event)"(html,基本事件)

  2. (bsValueChange)="doSomething($event)" (html, ngx-bootstrap 具体事件)

  3. 一个输入的基本反应形式解决方案 - 订阅事件 (ts) 如:

this.reactiveForm.get('inputName').valueChanges.subscribe(
  value => { this.doSomething(value); }
);

但在所有情况下都不起作用。

测试:

  1. 设置输入值A

  2. 将输入值更改为 B

预期行为:

结果:

方法 1。无法在演示中模拟此错误。这在 my demo 中有效,但在我的大型项目中无效。在我设置第一个日期 A 然后 select 日期 B 之后,我的 "doSomething" 以反应形式 [=114= 记录字段的实际日期(和 $event 的值) ] A 为实际字段值。演示工作正常,但我不知道为什么我无法在我的项目中实现这种行为。

方法 2。根本不工作。这是 ngx-bootstrap 的特定事件,但在 select 日期 B 之后,我再次在日志中获取日期 A

方法 3。根本不工作。这是纯反应形式的解决方案。您可以在最后一个输入的 my demo 上测试它。如果您输入 A,然后输入 B,则从 reactiveForm.value['item'] 登录,在您输入 B 之后,只有 A。所以即使你订阅了 valueChanges reactiveForm 输入的事件,值也不会改变。

我的问题是:
在更新此反应形式值后,我可以使用什么来捕获一个反应形式字段的事件?

这里是StackBlitz code DEMO with example

PS: 首先我以为是 ngx-bootstrap extension 的问题,但是对于 reactive form 的纯输入也不行.

A​​tiris,答案是:3。

但看到那是不同的

this.reactiveForm.value['testDateE'] //or this.reactiveForm.value.testDateE

this.reactiveForm.get('testDateE').value;

是因为如果你想检查一些在html你必须使用第二种方式。当我们发送提交时,我们提交了 reactiveForm.value 并且没有问题,同样如果你写 {{reactiveForm.value |json}} 你会看到实际值