Как сохранить id_product, когда я нахожу этот идентификатор с помощью find () с помощью Angular - PullRequest
0 голосов
/ 17 октября 2018

Я хочу сохранить идентификатор продукта в 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');
      }
    }
  }
...