В приведенном ниже коде показан элемент формы автозаполнения, который позволяет выбирать состояние в США.
<mat-form-field class="example-full-width">
<input matInput placeholder="State" aria-label="State" [matAutocomplete]="auto" [formControl]="stateCtrl">
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let state of filteredStates | async" [value]="state.name">
<img style="vertical-align:middle;" aria-hidden src="{{state.flag}}" height="25" />
<span>{{ state.name }}</span> |
<small>Population: {{state.population}}</small>
</mat-option>
</mat-autocomplete>
</mat-form-field>
Однако, если в моем приложении у меня есть множество мест, где требуется этот тип ввода, тогда было бы целесообразно превратить это в компонент (директива?), где все шаблоны не нужно повторять. Тем не менее, я все равно хотел бы использовать это в формах, управляемых шаблонами или с помощью модели, и позволять заполнителям, валидации и т.д. Варьироваться компонентом контейнера.
Что такое простой и надежный способ достичь этого?
Я пробовал общие подходы, рекомендованные для Angular, но они не учитывают различные требования к материалу Angular. Например. Нужно реализовать MatFormFieldControl. Руководство, представленное Angular Материалом, больше направлено на создание нового элемента управления формой с использованием примитивных элементов, а не на использование/обертку существующих элементов управления формой Angular.
Цель состоит в том, чтобы иметь возможность сделать что-то вроде этого в форме:
<mat-form-field>
<lookup-state placeholder="State of Residence" required="true" formControlName="resState">
</lookup-state>
</mat-form-field>