Как редактировать FormArray данные, полученные с LocalStorage? Angular 8
Приведенный ниже код ( https://stackblitz.com/edit/angular-ivy-s3ixx8 ) работает, сохраняет в локалсторедж, и все данные (к-во товаров) с него отображаются.
Проблема в следующем: когда перегружаю страницу, не получается редактировать эти данные. То есть, когда кликаю на "+" или "-", а потом делаю сабмит - все равно к-во товаров остается прежним.
app.component.ts:
form: FormGroup;
productsFormArray: FormArray;
localStorageData = [];
constructor() {
this.form = new FormGroup({
products: new FormArray([])
})
this.productsFormArray = this.form.get('products') as FormArray;
// get data from localStorage
this.localStorageData = JSON.parse(localStorage.getItem('dataSource'));
// if localStorage is not empty
if (this.localStorageData != null) {
console.log(this.localStorageData);
this.localStorageData.map((x, i) =>
this.productsFormArray.controls.push(new FormControl(x)));
}
}
// add new product
add() {
(this.form.get('products') as FormArray).push(new FormControl(0));
}
// count quantity of product
count(n: number, i: number) {
var value = this.productsFormArray.at(i).value;
value += n;
this.productsFormArray.at(i).setValue(value);
}
onSubmit() {
console.log(this.form.value);
}
saveToLocalStorage() {
localStorage.setItem('dataSource',
JSON.stringify(this.form.value.products));
}
https://stackblitz.com/edit/angular-ivy-s3ixx8
Ответы (1 шт):
Автор решения: Adrug
→ Ссылка
Вы неправильно инициализировали FormArray в конструкторе, но правильно добавляли в add. Поле controls хоть и является номинально массивом, но напрямую пушить в него нельзя.
this.localStorageData.map((x, i) => this.productsFormArray.push(new FormControl(x)));