Ionic 3 emitEvent имеет значение false, но все еще выполняет событие изменения, когда выбран параметр ion - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь использовать emitEvent как ложное для Form Control из FormArray, чтобы изменить значение параметра ion-select на конкретное без повторного запуска события change.

InВ моем реальном приложении событие получит значения из базы данных, но я создал простой stackblitz для описания ситуации:

createForm(){
    this.formGroup = this.fb.group({
      formArray: this.createArray()
    })
  }
  createArray()
  {
    return new FormArray(this.dummyData.map(item=> new FormGroup({
      arrayControl: new FormControl(item.cid)
    })))
  }

  change(array, index)
  {
    console.log('ionChange fired');
    (<FormArray>this.formGroup.get('formArray')).at(index).get('arrayControl').patchValue(1, { onlySelf: true, emitEvent: false });
  }

И я вызываю createForm() в конструкторе:

constructor(
    public fb: FormBuilder,
    public navCtrl: NavController) {
    this.createForm();  
  }

Вот скрипт html:

<ion-header>
  <ion-navbar>
    <ion-title>Home</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <div [formGroup]="formGroup" *ngIf="formGroup">
    <ion-slides slidesPerView="2">
    <ion-slide formArrayName="formArray" *ngFor="let array of dummyData; let i=index">
    <ion-item [formGroupName]="i">
    <ion-select formControlName="arrayControl" (ionChange)="change(array, i)">
      <ion-option *ngFor="let list of data" [value]="list.id">{{list.name}}</ion-option>
    </ion-select>
    </ion-item>
    <ion-item>
      <ion-label>{{array.population}}</ion-label>
    </ion-item>
    <ion-item>
      <ion-label>{{array.id}}</ion-label>
    </ion-item>
    </ion-slide>
    </ion-slides>
  </div>
</ion-content>

Мне иногда нужно сбросить всю форму, поэтому при сбросе все значения ion-select устанавливаются в свои начальные значения, поэтомуПовторный вызов API, который мне не нужен в этом случае, так как исходные данные сохраняются в массиве на стороне клиента.

...