【问题标题】:How to notify that element form was changed?如何通知元素形式已更改?
【发布时间】:2019-11-08 11:51:04
【问题描述】:

我有一些表格是由FormGroup生成的。

class FormGroupCustom {
    form: FormGroup;
}

let forms: FormGroupCustom[] = [];

for(let i = 0; i <= 10; i++) {
   this.forms.push({"formName": i, "form": new FormGroup()});
} 

如何从数组 this.forms 通知 formName: 1 任何字段已从 formName: 2 更改。

我尝试应用观察者模式,因为我不需要使用反应式嵌套表单。

我的解决方案是:

class Notify {

     notifyChange(formName: string, valueField: any) {
             // FIND form in array forms by formName
     }

}

然后在特定元素上应用ng-change,如果形式如下:

<input type="text" (ngChange)="change('formName1', 'value')"


change(formName: string, value: any) {
    let notify = new Notify();
    notify.notifyChange(formName, value);
} 

所以notifyChange 可以在数组表单中找到表单,而不是在此表单中的特定字段上执行操作

【问题讨论】:

  • 您确定您提供的代码示例正常运行吗?我认为您不能将 "formName": i, "form": new FormGroup() 推入数组中。您是否缺少对象文字 {}
  • 抱歉是对象,我编辑了

标签: angular angular5 angular8


【解决方案1】:
for(let i = 0; i <= 10; i++) {
  this.forms.push({formName: i, form: new FormGroup({}) });
  let s = this.forms[i].form.valueChanges.subscribe(val => {
    // do something when form control changes
  })

  this.subs.push(s)
}

有一个可以订阅的 valueChanges() observable,当表单的值发生变化时做一些事情,这就是你要找的吗?

Stackblitz Example

【讨论】:

  • 性能怎么样?我不相信这是个好主意。我可以做更多的OOP吗?我需要划分通知程序和表单的逻辑。我由我的类包装并存储在数组中的表单,因为我需要在模板中显示表单
猜你喜欢
  • 2014-01-27
  • 1970-01-01
  • 2017-04-28
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多