Я пытаюсь использовать 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, который мне не нужен в этом случае, так как исходные данные сохраняются в массиве на стороне клиента.