Как отправить идентификатор продукта при использовании автозаполнения в Angular 6? - PullRequest
0 голосов
/ 09 октября 2018

У меня проблема с автозаполнением.

HTML

  <div class="row">
    <div class="input-field col s12">
      <select formControlName="p_Product_type_id" id="p_Product_type_id" [(ngModel)]="variable" materialize="material_select"
        [materializeSelectOptions]="producttype">
        <option value="" disabled selected>Product Type*</option>
        <option *ngFor="let item of producttype;let i=index;" [value]="item.product_type_id">{{item.product_type_name}}</option>
      </select>
    </div>
    <div class="input-field col s12">
      <div *ngIf="addProductForm.controls.p_Product_type_id.value === '222222'">
        <input formControlName="p_product_id" id="p_product_id" matInput placeholder="Select Sensors*" aria-label="State"
          [matAutocomplete]="auto" autoActiveFirstOption [formControl]="sensors_id">
        <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayWith">
          <mat-option (onSelectionChange)="updateForm($event, s.sensors_id, 'p_product_id')" *ngFor="let s of filteredOptionsSensor | async"
            [value]="s.sensor_serial">
            {{s.sensor_serial}}
          </mat-option>
        </mat-autocomplete>
      </div>
      <div *ngIf="addProductForm.controls.p_Product_type_id.value === '1111'">
        <input formControlName="p_product_id" id="p_product_id" matInput placeholder="Select Contract*" aria-label="State"
          [matAutocomplete]="auto1" autoActiveFirstOption [formControl]="contrat_id">
        <mat-autocomplete #auto1="matAutocomplete" [displayWith]="displayWith">
          <mat-option (onSelectionChange)="updateForm($event, c.contrat_id, 'p_product_id')" *ngFor="let c of filteredOptionsContract | async"
            [value]="c.contratdesc">
            {{c.contratdesc}}
          </mat-option>
        </mat-autocomplete>
      </div>
      </div>

Группа форм

this.addProductForm = this.fb.group({
  'p_Product_type_id': [null],
  'p_product_id': new FormControl('', Validators.required),
  'p_Quantity': new FormControl('', Validators.required),
  'p_Line_num': new FormControl(this.randomString(), Validators.required),
  'p_Description': new FormControl(''),
  'p_Unit_price': new FormControl('', Validators.required),
  'p_Subtotal': new FormControl('', Validators.required)
});

IМожно выбрать значение с помощью этой функции:

sensorid: number;
contractid: number;

  updateForm(ev: any, idd: any, componentid: any) {
    console.log('ev', ev)
    console.log('idd', idd)
    console.log('componentid', componentid)
    if (ev.isUserInput) {
      if (componentid === 'p_product_id') {
        this.sensorid = idd;
        this.addProductForm['controls']['p_product_id'].setValue(ev.source.value);
      } else if (componentid === 'p_product_id') {
        this.contractid = idd;
        this.addProductForm['controls']['p_product_id'].setValue(ev.source.value);
      } else {
        console.log('wrong');
      }
    }
  }

Проблема заключается в том, что когда я отправляю товар, в свойстве p_product_id отправляем название товара, я хочу отправить id товара, на изображенииsensors_id что я хочу представить.

Как на картинке ниже:

enter image description here

  onAddProduct() {
    let products = [];
    let newProduct = this.addProductForm.value
    this.product = newProduct;
    newProduct.contrat_id = this.contractid;
    newProduct.sensors_id = this.sensorid;
    console.log(newProduct)
    this.ps.addProduct(newProduct);
    this.router.navigate(['/home]);
  }

Пожалуйста, предложите.

...