У меня есть большой компонент, который загружает данные из выбранной записи в FormGroup с помощью FormBuilder.
Я нахожусь в процессе разделения этого компонента на повторно используемые службы и дочерние компоненты.
У меня есть функция, которая вызывается из представления для добавления новой строки в FormArray. Эта функция принимает имя массива и добавляемое значение.
Это работает правильно внутри компонента.
Вопрос: Как эту функцию можно перенести в службу (или другое решение), чтобы сделать ее многократно используемой для множества различных компонентов? Другими словами, я хочу иметь возможность использовать функцию onAddRow во многих компонентах без необходимости переписывать логику повторно. Поскольку эта функция использует ключевое слово this
для доступа к текущему контексту, я не уверен, как переместить его в службу многократного использования.
Вот код компонента, который я пытаюсь переместить в службу. Обратите внимание, что у меня есть много других функций, похожих на onAddRow, которые используют ключевое слово this
, и я хочу иметь возможность переместить все в службу многократного использования.
Компонент TS
constructor(
private fb: FormBuilder
) { }
/**
* Add a new element to a form control array
* @param {string} formCtrlArrayName name of the form control array
* @param {string} valueToAdd element to add to the form control array
*/
public onAddRow(formCtrlArrayName: string, valueToAdd: any) {
this[formCtrlArrayName].push(this.fb.control(valueToAdd));
}
HTML-компонент
<button mat-button attr.aria-label="Add Assigned To" matTooltip="Add Assigned To"
(click)="onAddRow('AssignedTo', '', '')">
<mat-icon>add_circle</mat-icon>
</button>