пожалуйста, прости, если мой вопрос глуп, но я понятия не имею, что я делаю не так. У меня есть массив объектов
export interface IOptionsData {
option: string;
optionPrice: number;
benefit: string;
benefitPrice: number;
oneshotPrice: number;
commitmentPeriod: number;
}
formData: IOptionsData[] = [];
и сохранение данных из формы в нем
onOptionChange(i) {
console.log(i);
console.log(this.productForm.controls['user_options']);
this.formData[i].option = this.productForm.controls['user_options'].value[i].option;
this.formData[i].commitmentPeriod = this.productForm.controls['user_options'].value[i].commitmentPeriod;
console.log(this.formData);
...
}
На первом элементе все кажется нормальным
Мои данные формы:
И данные моего массива:
Но когда я обновляю другой элемент в форма, вместо обновления этого элемента в массиве, он обновляет полный массив до этих значений
Функция onChange вызывается с правильным параметром, множественные вызовы функций отсутствуют
Не представляю, почему это происходит
Пожалуйста, если вам известна какая-либо причина, по которой это будет
Спасибо
РЕДАКТИРОВАТЬ: забыл упомянуть
Прежде чем перейти к массиву объектов, я использовал отдельные массивы для каждого значения, которое нужно сохранить.
selectedOptions: string[] = [];
selectedBenefits: string[] = [];
selectedPrices: number[] = [];
benefitPrices: number[] = [];
oneshotBenefitPrices: number[] = [];
И то же обновление работает, как и предполагалось, обновляется только обновленное значение
this.selectedOptions[i] = this.productForm.controls['user_options'].value[i].option;
РЕДАКТИРОВАТЬ №2:
Для воспроизведения этой ошибки вам не нужно html template.
Вот часть .ts файла
export interface IOptionsData {
option: string;
optionPrice: number;
benefit: string;
benefitPrice: number;
oneshotPrice: number;
commitmentPeriod: number;
}
demoOptionsData: IOptionsData = { option: null, optionPrice: 0, benefit: null, benefitPrice: 0, oneshotPrice: 0, commitmentPeriod: 24 };
ngOnInit() {
/* Initiate the form structure */
this.formData.push(this.demoOptionsData);
this.formData.push(this.demoOptionsData);
this.formData.push(this.demoOptionsData);
this.formData[1].option = 'TEST';
console.log(this.formData);
}