Мне нужно знать, как я динамически устанавливаю <option>
формы FormControl *1001* по условию.
Допустим, у нас есть клиенты с заказами.Существует раскрывающееся меню, в котором мы выбираем клиента, и в зависимости от этого клиента параметры для раскрывающегося меню заказов должны устанавливаться динамически, и должен быть выбран конкретный заказ.
Также оба раскрывающихся меню имеют <option>
«(новый клиент / заказ) », если еще нет клиента или заказа, поэтому, если мы направляемся к этой форме, не имея клиента, этот« новый »вариант должен быть выбран в обоих выпадающих меню.Если у нас есть клиент без заказов, в раскрывающемся меню заказов следует выбрать «новый» вариант.
Это form.component.html:
<form [formGroup]="customerForm">
<select formControlName="customers">
<option>(new customer)</option>
<option [ngValue]="customer" *ngFor="let customer of customers">
{{customer.name}}
</option>
</select>
<select formControlName="orders">
<option>(new order)</option>
<option [ngValue]="order" *ngFor="let order of filteredOrders">
{{order.id}}
</option>
</select>
</form>
Это форма.component.ts:
customerForm: FormGroup;
customers: Customer[] = [
{ "id": 1,
"name": "Meghan Castellano",
"orderIds": [1,2] },
{ "id": 2,
"name": "Monika Weiss",
"orderIds": [3,4] }];
orders: Order[] = [{"id": 1},{"id": 2},{"id": 3},{"id": 4}];
filteredOrders: Order[];
constructor( private route: ActivatedRoute,
private fb: FormBuilder) {}
ngOnInit() {
this.customerForm = this.fb.group({
customers: '',
orders: '' });
let customerId = this.route.snapshot.getParam('id');
if (customerId == 0) {
this.customerForm.patchValue({
customers: "(new customer)",
orders: "(new order)" });
}
else
{
let customer = this.customers[customerId];
this.customerForm.patchValue({ customers: customer.name });
if (customer.orderIds.length != 0) {
this.filteredOrders = getCustomersOrders(customer);
this.customerForm.patchValue({
orders: this.filteredOrders[0].id }
}
}
}
getCustomersOrders(customer: Customer): Order[] {
let orders: Order[];
for (var id = 0; id < customer.orderIds.length; id++) {
let orderId = customer.orderIds[id];
let order = this.orders.find(i => i.id == orderId);
orders.push(order); }
return orders;
}
В настоящее время я направляюсь в форму и предоставляю идентификатор с URL.Раскрывающееся меню клиента выбирает правильного клиента в зависимости от идентификатора в URL.
Однако раскрывающееся меню заказа заполнено только правильно, но выбор не работает.Опции вообще не выбраны.
Если я заменим значение в этом операторе:
this.customerForm.patchValue({ orders: this.filteredOrders[0].id }
на строку "(new order)"
, уже указанную в html:
this.customerForm.patchValue({ order: "(new order)" })
все работает.Строка "(new order)"
выбирается в раскрывающемся меню заказов.Это просто не работает для фильтрованных заказов.
Что я здесь не так делаю?Может быть, мне нужен совершенно другой подход?