Как сообщить, что форма элемента была изменена? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть некоторые формы, сгенерированные FormGroup.

class FormGroupCustom {
    form: FormGroup;
}

let forms: FormGroupCustom[] = [];

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

Как я могу уведомить formName: 1 из массива this.forms, что любое поле было изменено с formName: 2.

Я пытался применить шаблон Observer, потому что мне не нужно использовать реактивные вложенные формы.

Мое решение:

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 может найти форму в массиве, чем выполнять действия над определенным полем в этой форме

1 Ответ

1 голос
/ 08 ноября 2019
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 (), на которую можно подписаться, чтобы что-то делать при изменении значения формы, это то, что вы ищете?

Пример Stackblitz

...