Angular 2 копия реактивная форма без ссылки - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть реактивная форма, которая при отправке должна округлять некоторые из представленных значений, не влияя на то, как значения выглядят на странице.

Для этого я создал метод, который создает новую формуи округляет значения, затем возвращает для фактической отправки формы:

     mapFormValues(): FormGroup {
        const newForm: FormGroup = this.myOriginalForm;

        const fieldsToRound = ['field1', 'field2', 'field3'];

        fieldsToRound.forEach((field: string) => {
            if (newForm.get(field).value >= 1000) {
                const formField = newForm.get(field).value / 1000;
                newForm.get(field).setValue(formField);
            }
        });

        return newForm;
    }

Проблема в том, что, поскольку мой newForm является просто ссылкой на мою исходную форму, он все еще изменяет исходные значения формы насама страница.

Как мне создать копию формы, в которую я могу преобразовать значения, не меняя исходную форму?

Я смотрел на Клонировать объект без ссылки javascript но, кажется, я не могу сделать это с FormGroups.

1 Ответ

0 голосов
/ 04 декабря 2018

Как это сработало, я выложу в качестве ответа.По сути, вам нужно получить значения из формы для их обработки.Для этого FormGroup имеет метод getRawValue (), который возвращает данные из группы fromGroup, на которые эти данные не ссылаются, поэтому это не повлияет на вашу группу formGroup.

Эти данные являются объектом json, который может бытьизменено свободно.Вы можете использовать этот объект для обновления или создания другого FormGroup

// My form for clarity
   this.myForm = this.formBuilder.group({
      customerName: '',
      someNumber: 0
    })

//

// Gets the values from the form
let temp = this.myForm.getRawValue();

// Modify at your will
temp.customerName = 'Peter';

// Save to original form
this.myForm.setValue(temp);
console.log(this.myForm.getRawValue(), 'Original Form')

// Or modify as you want and create another form with the data
delete temp.someNumber;
let myForm2 = this.formBuilder.group(temp)

// Form created with the values from the original form minus the someNumber attribute that i deleted
console.log(myForm2.getRawValue(), 'Form created with the object')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...