#angular #ionic-framework
Вопрос:
У меня есть форма, в которой у меня есть пять полей для одного цикла, и я хочу отправить ее в API, чтобы сохранить в базе данных.
Это тот самый product.page.html
<details *ngFor="let product of products;">
<summary>{{product.name}}</summary>
<ion-input type="text" [(ngModel)]="categoryId" value="{{product.categoryId}}"></ion-input>
<ion-input type="text" [(ngModel)]="productId" value="{{product.id}}"></ion-input>
<ion-row>
<ion-col>
<ion-input type="text" [(ngModel)]="minPrice" value="{{product.minPrice}}"></ion-input>
</ion-col>
<ion-col>
<ion-input type="text" [(ngModel)]="maxPrice" value="{{product.maxPrice}}"></ion-input>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
For Sale:
<ion-select [(ngModel)]="forSale" interface="popover">
<ion-select-option value="0">No</ion-select-option>
<ion-select-option value="1">Yes</ion-select-option>
</ion-select>
</ion-col>
</ion-row>
</details>
<ion-button type="button" (click)="saveDetails()">Save</ion-button>
Это продукт.страница.ts
...
categoryId: any;
productId: any;
minPrice: any;
maxPrice: any;
forSale: any;
saveDetails() {
let data = {categoryId: this.categoryId, productId: this.productId, minPrice: this.minPrice, maxPrice: this.maxPrice, forSale: this.forSale};
this.http.post('http://example.com/api/saveDetails', JSON.stringify(data))
.subscribe((res: any) => {console.log("success");});
}
Проблема в том, что я не знаю, как отправить эти данные в приведенном ниже формате, потому что API принимает этот формат только для сохранения их в базе данных.
"productList": [
{
//First
'categoryId': 'value',
'productId': 'value',
'minPrice': 'value',
'maxPrice': 'value',
'forSale': 'value'
},
{
//Second
'categoryId': 'value',
'productId': 'value',
'minPrice': 'value',
'maxPrice': 'value',
'forSale': 'value'
},
...
],
Любая помощь, которая сделает это возможным, будет признательна.
Комментарии:
1. Не могли бы вы, пожалуйста, опубликовать свой сгенерированный JSON здесь ?
2. @bZezzz Когда я нажимаю кнопку сохранить, я получаю неопределенную ошибку в консоли chrome. Таким образом, JSON не генерируется.
3.
console.log(JSON.stringify(data))
?4. ответ будет {}
5. @bZezzz что ты думаешь? В чем проблема?
Ответ №1:
Например, вы можете использовать ReplaySubject
. Сделайте это в product.page.ts
:
private readonly dataSend = new ReplaySubject();
ngOnInit(): void {
this.dataSend.pipe(
scan((acc, current) => {
acc.push(current)
return acc;
}, []),
debounceTime(1),
switchMap(data => this.http.post('http://example.com/api/saveDetails', data))
).subscribe(console.log);
}
…
saveDetails() {
const data = {categoryId: this.categoryId, productId: this.productId, minPrice: this.minPrice, maxPrice: this.maxPrice, forSale: this.forSale};
this.dataSend.next(data);
}
…
ngOnDestroy(): void {
this.dataSend.complete();
}
Комментарии:
1. если вам нужно
productList
свойство в отправленных данных:this.http.post('http://example.com/api/saveDetails', {productList: data})
2. Привет. Это не сработало.