Materiał kątowy 7 - Autouzupełnianie
Plik <mat-autocomplete>, dyrektywa kątowa, jest używana jako specjalna kontrolka wejściowa z wbudowanym menu rozwijanym pokazującym wszystkie możliwe dopasowania do niestandardowego zapytania. Ta kontrolka działa jak okno sugestii w czasie rzeczywistym, gdy tylko użytkownik wpisze w obszarze wprowadzania.<mat-autocomplete> może służyć do dostarczania wyników wyszukiwania z lokalnych lub zdalnych źródeł danych.
W tym rozdziale pokażemy konfigurację wymaganą do narysowania kontrolki autouzupełniania przy użyciu Angular Material.
Utwórz aplikację kątową
Wykonaj następujące kroki, aby zaktualizować aplikację Angular, którą utworzyliśmy w Angular 6 - rozdział Konfiguracja projektu -
Krok | Opis |
---|---|
1 | Utwórz projekt o nazwie materialApp, jak wyjaśniono w rozdziale Angular 6 - Konfiguracja projektu . |
2 | Zmodyfikuj app.module.ts , app.component.ts , app.component.css i app.component.html, jak wyjaśniono poniżej. Resztę plików nie zmieniaj. |
3 | Skompiluj i uruchom aplikację, aby zweryfikować wynik zaimplementowanej logiki. |
Poniżej znajduje się treść zmodyfikowanego deskryptora modułu app.module.ts.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MatAutocompleteModule,MatInputModule} from '@angular/material';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
MatAutocompleteModule,
MatInputModule,
FormsModule,
ReactiveFormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Poniżej znajduje się zawartość zmodyfikowanego pliku hosta HTML app.component.html.
<form class = "tp-form">
<mat-form-field class = "tp-full-width">
<input type = "text"
placeholder = "US State"
aria-label = "Number"
matInput
[formControl] = "myControl"
[matAutocomplete] = "auto">
<mat-autocomplete #auto = "matAutocomplete">
<mat-option *ngFor = "let state of states" [value] = "state.value">
{{state.display}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
Poniżej znajduje się zawartość zmodyfikowanego pliku CSS app.component.css.
.tp-form {
min-width: 150px;
max-width: 500px;
width: 100%;
}
.tp-full-width {
width: 100%;
}
Poniżej znajduje się zawartość zmodyfikowanego pliku ts app.component.ts.
import { Component } from '@angular/core';
import { FormControl } from "@angular/forms";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'materialApp';
myControl = new FormControl();
states;
constructor(){
this.loadStates();
}
//build list of states as map of key-value pairs
loadStates() {
var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\
Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\
Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\
Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\
North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\
South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\
Wisconsin, Wyoming';
this.states = allStates.split(/, +/g).map( function (state) {
return {
value: state.toUpperCase(),
display: state
};
});
}
}
Wynik
Sprawdź wynik.
Detale
Najpierw utworzyliśmy pole wprowadzania i przypisaliśmy autouzupełnianie o nazwie auto przy użyciu atrybutu [matAutocomplete].
Następnie utworzyliśmy autouzupełnianie o nazwie auto przy użyciu tagu mat-autocomplete.
Następnie, używając pętli * ng For, tworzone są opcje.