Как установить двухстороннее связывание без использования ngModel в Angular Material - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь привязать элемент формы к объекту без использования ngModel.Но это не работает.

Я пытался использовать атрибут [(value)] = "".Однако начальное значение элемента изменилось на «undefined».

https://material.angular.io/components/input/overview

<mat-form-field class="col-md-4">
    <input matInput placeholder="First name" formControlName="firstCtrl" [(value)]="formData.firstName">
    <mat-error>First name can not be left blank</mat-error>
</mat-form-field>

formData = new RawFormData;

Но это работает правильно:

<mat-form-field>
    <mat-select placeholder="Title" formControlName="titleCtrl" [(value)]="formData.gender">
          <mat-option *ngFor="let title of personalTitle" [value]="title.value">{{title.viewValue}}</mat-option>
    </mat-select>
</mat-form-field>

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Единственный способ сделать это без [ngModel] - это использовать (keyup).Я бы попытался изменить ваш ввод на что-то вроде этого:

<mat-form-field class="col-md-4">
          <input matInput placeholder="First name" formControlName="firstCtrl" (keyup)="onKey($event)">
          <mat-error>First name can not be left blank</mat-error>
        </mat-form-field>

, а затем добавить функцию

onKey(event: any) { // without type info
    formData.gender = event.target.value;
  }
0 голосов
/ 17 сентября 2018

value ввода является предопределенным атрибутом html и не выдает изменений.
С другой стороны, mat-select - это пользовательский угловой компонент, в котором они объявили value одновременно как ввод и вывод, что-то вроде этого:

@Input('value') input: any;
@Output('value') output: EventEmitter;

Вот почему вы можете связать его обоими способами.
так что в вашем случае вы либо работаете с ngModel, либо делаете что-то вроде этого:

<input (change)="inputValue = $event.target.value" [value]="inputValue"/>
...