Я хочу сохранить идентификатор продукта в FormArray.
Во-первых, это продукты:
{
"StatusCode": 0,
"StatusMessage": "OK",
"StatusDescription": [
{
"s_id": "11E8C70C8A5D78888E6EFA163EBBBC1D",
"s_serial": "PkMGo",
"active": 0,
},
{
"s_id": "11E8C70FB9D10DB38E6EFA163EBBBC1D",
"s_serial": "UgooX",
"active": 0,
},
{
"s_id": "11E8C7179F85836D8E6EFA163EBBBC1D",
"s_serial": "IiLnM",
"active": 0,
}, .....
{
"s_id": "11E8C71905123F1A8E6EFA163EBBBC1D",
"s_serial": "LVpcP",
"active": 0,
}
}]
}
Секунды, у меня есть этот JSON, который получается по продукту: homeboxp
{
"StatusCode":0,
"StatusMessage":"OK",
"StatusDescription":
{"products":[
{
"s_serial":"PkMGo",
"s_id":"11E8C70C8A5D78888E6EFA163EBBBC1D"
},
{
"s_serial":"LVpcP",
"s_id":"11E8C71905123F1A8E6EFA163EBBBC1D"
},
{
"s_serial":"IiLnM",
"s_id":"11E8C7179F85836D8E6EFA163EBBBC1D"
}
],
"hb_id":"11E8C71242B742EC8E6EFA163EBBBC1D",
"active":0,
}
}
С помощью этого фильтра я могу найти id_product:
product: Product;
products: Product[]=[]
selectedIDproducts: string =
this.products.filter(x => x.s_id === this.product.s_id[0])
.map(y => y.s_serial).join('');
this.ss.getAllproducts ().subscribe(products => {
this.products = products;
if (this.products && this.products.length > 0) {
for (let i = 0; i < this.products.length; i++) {
let ss = this.products.find(x => {
let p = this.homeboxp.sensors[i];
return (p && x.s_id === p.s_id);
});
if (ss) {
this.selectedIDproducts = ss.s_serial;
console.log(this.selectedIDproducts)
}
}
}
});
Теперь, эти я должен быть сохранен в массиве.
На самом деле я публикую название продукта в массиве, с этой формой:
get formData() { return <FormArray>this.editForm.get('s_id'); }
populateForm() {
this.activatedRoute.params.pipe(flatMap(params => this.ws.getproductById(params['id'])))
.subscribe(
..............
homeboxp => {
this.homeboxp = homeboxp;
.........
this.homeboxp.sensors.forEach(x => {
this.formData.push(new FormControl(x.s_serial))
}););}
Я пытаюсь сохранить как это:
this.editForm.value['s_id'] = this.selectedIDproducts
, но я сохраняю только последний идентификатор продукта.
код автозаполнения:
<div *ngFor="let sensor of sensorsIdFormArray; let i = index">
<input formControlName="{{i}}" id="sensors_id" type="text" placeholder="Select Product" aria-label="Number" matInput [matAutocomplete]="auto1">
<mat-autocomplete autoActiveFirstOption #auto1="matAutocomplete" [displayWith]="displayWith">
<mat-option (onSelectionChange)="updateForm($event, sensor.s_serial, 's_id', i)"
*ngFor="let sensor of filteredProducts | async | myPipe: products : 's_serial': i" [value]="sensor.s_id">
{{sensor.s_serial}}
</mat-option>
</mat-autocomplete>
</div>
Функция обновления, когда я добавляю руду и удаляю продукт.
updateForm(ev: any, idd: any, componentid: any, index) {
if (ev.isUserInput) {
if (componentid === 's_id') {
(<FormArray>this.editForm.get('s_id')).at(index).patchValue(ev.source.viewValue);
} else {
console.log('error');
}
}
}