从mat-autocomplete获取源FormControl

时间:2019-11-18 05:06:29

标签: angular angular-material angular-reactive-forms mat-autocomplete

我有一个动态matInput对象表,如下所示:

    <div formArrayName="salesItems">
        <table class="app-sales-items-table">
            <thead>
                <th>Qty</th>
                <th>Item #</th>
                <th>Description</th>
                <th>Weight</th>
                <th>Serial No</th>
                <th>Unit Price</th>
                <th>Item Discount %</th>
                <th>Line Total</th>
            </thead>
            <tbody>
                <tr *ngFor="let item of salesItemsForm.get('salesItems').controls; let index=index" [formGroupName]="index">
                    <td>{{item.qty}}</td>
                    <td>
                        <mat-form-field class="field-full-width">
                            <input type="text" matInput formControlName="itemNumber" [matAutocomplete]="autoItemNumber">
                        </mat-form-field>
                    </td>
                    <td>
                        <mat-form-field class="field-full-width">
                            <input type="text" matInput formControlName="description" [matAutocomplete]="autoDescription">
                        </mat-form-field>

                    </td>
                    <td>{{item.weight}}</td>
                    <td>{{item.serialNumber}}</td>
                    <td>{{item.unitPrice}}</td>
                    <td>{{item.itemDiscount}}</td>
                    <td>{{item.lineTotal}}</td>
                </tr>
            </tbody>
        </table>
    </div>

每个matInput都有一个相应的mat-autocomplete,例如:

    <mat-autocomplete #autoDescription="matAutocomplete" (optionSelected)="setSelectedSalesItem($event.option.value, $event.source)">
        <mat-option *ngFor="let option of (filteredSalesItems )" [value]="option">{{option.description}}
        </mat-option>
    </mat-autocomplete>

如您所见,在optionSelected方法中,我传入了$ event.source。我的真正目标是获取触发事件的FormControl,因此我可以执行诸如在同一行中设置其他值之类的操作。问题是$ event.source的类型为MatAutoComplete,我不确定如何从中获取(反应性)FormControl。

编辑:

这里的堆叠闪电战:https://stackblitz.com/edit/angular-mzryga?file=src%2Fapp%2Fapp.component.ts

1 个答案:

答案 0 :(得分:0)

我想我明白了。我移动了ngFor的内部。 Siince我的ngFor看起来像这样:

<tr *ngFor="let item of salesItemsForm.get('salesItems').controls; let index=index" [formGroupName]="index">

我可以通过item,从那里进入肉汁。