Поскольку технически вы все еще используете тот же mat-select
... и не создаете новый ... старое значение все еще находится в mat-select
...
Существует keyManager
за компонентом MatSelect
, управляющим всей этой логикой, и поскольку вы помещаете текущие значения в новый массив и сбрасываете ngModel
..., вам также необходимо перейти к keyManager
и установить значения по умолчанию.
Создать templateRef
для корня mat-select
из #select
<mat-form-field class="temp-item-field" *ngIf="accounts">
<mat-select #select [(ngModel)]="tempItem.accountId" placeholder="Account">
<mat-option *ngFor="let account of accounts" [value]="account.id">{{account.name}}</mat-option>
</mat-select>
</mat-form-field>
Создать @ViewChild
в компоненте, чтобы получить ссылку
@ViewChild('select') _select
В вашем addItem()
установите значения activeItem
и activeItemIndex
по умолчанию.
addItem() {
if (this.tempItem.amount && this.tempItem.accountId) {
this.tempItem.transactionId = this.transaction.id;
this.transaction.transactionItems.push(this.tempItem);
this.tempItem = new TransactionItem();
this.focusTransactionAmount();
this._select['_keyManager']['_activeItem'] = undefined;
this._select['_keyManager']['_activeItemIndex'] = -1;
}
}
Stackblitz
https://stackblitz.com/edit/angular-ywrz7v?embed=1&file=src/app/app.component.ts
Лично я бы рекомендовал вам использовать для этого ReactiveForms
и создать новыйполей через FormControlArray
... вместо "смещения" ваших текущих значений из текущих полей в новые и сброса исходных корневых полей ...
В принципе вы можете сделать обратное тому, что высейчас делаем ... создайте новые поля с новыми formControls
и новыми state
на tab
, оставляя текущие введенные значения там, где они есть ... и, по сути, сможете избежать этого и используя ngModel
все вместе.
Пожалуйста, посмотрите этот SO-ответ, где я предоставил обзор того, как реактивные формы работают в цикле *ngFor
... вместе с примером stackblitz.
buildForm()
в stackblitz будетпо сути, это то, что вам нужно, чтобы получить addItem()
нажатие нового formControls
, которое автоматически создает новые поля в представлении.
Динамическая форма с использованием * ngFor и отправка значений из нее