У меня есть форма динамического флажка фильтра поставщика.
<form (submit)="submit(form.value)">
<label class="form-check" *ngFor="let supplier of suppliers;">
<input class="form-check-input" type="checkbox"
(change)="filter(supplier.label, $event.target.checked)"
[checked]="(filters|json).indexOf((supplier.label).id) >= 0"
>
<span class="form-check-label">
<span class="float-right badge badge-light round">{{supplier.count}}</span>
{{(supplier.label).name}}
</span>
</label>
<button class="btn btn-block btn-outline-primary">Apply</button>{{form.value|json}} <-- the form.value is not updated if filters is updated, even the input is unchecked-->
</form>
У меня есть два компонента, и я работаю с декоратором @Input (): filters
, чтобы получать вид выбранных флажков от первого компонента.
Это мой компонент фильтра поставщика:
export class SupplierFilterComponent {
form: FormGroup;
suppliersFormArray: FormArray;
@Input() suppliers: Aggregation[];
@Input() filters: Filter[];
@Output() eventEmitterFilter = new EventEmitter<number>();
constructor(formBuilder: FormBuilder) {console.log(this.filters);
this.form = formBuilder.group({
'suppliers': formBuilder.array([])
});
}
filter($label: string, isChecked: boolean) {
const supplier = JSON.parse($label);
this.suppliersFormArray = <FormArray>this.form.controls.suppliers;
if (isChecked) {
this.suppliersFormArray.push(new FormControl(supplier));
} else {
const index = this.suppliersFormArray.controls.findIndex(x => x.value.id === supplier.id);
this.suppliersFormArray.removeAt(index);
}
}
submit($event) {
this.eventEmitterFilter.emit($event.suppliers);
}
}
Обычно, если вход фильтра обновляется, значения формы флажка будут обновляться.Погодный вход проверен или не проверен (его зависимость от значения @Input (): filters
).
Обычно, если filters
изменить эту часть, (change)="filter(..
будет запущен.Но, к сожалению, (change)
не срабатывает.Я не знаю, почему form.value
не обновляется для каждого обновления значения @Input (): filters
.(Обновляется только при нажатии)
Как видите, только в проверено, потому что this.filters
содержит только в , но к сожалению form.value содержат еще один элемент "aspernatur".
Я не понимаю, почему ввод не отмечен, но form.value не обновляется.Может кто-нибудь помочь мне разобраться, как обновить форму.значение, если filters
значение изменено.