Angular 2 Reactive Forms 仅从更改的控件中获取值

Boa*_*nut 2 angular angular-reactive-forms

我有一个包含所有输入的动态创建的表单。我正在订阅更改,但是当某个控件发生更改时,我会从所有控件中获取值,因此我真的不知道哪个控件发生了更改。是否可以使用 valueChanges 函数仅从更改的控件中获取更改的值?

该表单非常大,因此将每个控件都订阅到 valueChanges 不是一种选择。

该函数目前如下所示:

checkForValueChanges() {
    this.metadataForm.valueChanges.subscribe(controls => {
        // how to get the changed control form name here ?
    });
}
Run Code Online (Sandbox Code Playgroud)

由于项目非常大,我只是做了一个简单的例子来展示我的问题: StackBlitz example 您可以在控制台中看到我得到的结果是所有控件,而不仅仅是更改的控件。

ibe*_*oun 5

我能想到的最干净的方法是动态订阅所有表单控件:

const subscriptions = [];
for (const key of Object.keys(this.metadataForm.controls)) {

    const subscription = this.metadataForm.controls[key].valueChanges
    .subscribe(value => console.log('value :' + value[key] + ' and key : ' + key));

    subscriptions.push(subscription);
}
Run Code Online (Sandbox Code Playgroud)

我添加了一组订阅来处理销毁时的取消订阅。