Visão geral da diretiva Angular Autocomplete
Angular Autocomplete é uma diretiva de caixa de pesquisa que permite que os usuários encontrem, filtrem e selecionem facilmente um item de uma lista de sugestões enquanto digitam. Rico em recursos, ele suporta vinculação de dados contínua, filtragem, agrupamento, opções de personalização de IU e outras funcionalidades integradas para que os desenvolvedores possam criar uma experiência de pesquisa de preenchimento automático intuitiva.
A diretiva igxAutocomplete
fornece uma maneira de aprimorar uma entrada de texto mostrando um igxDropDown
com opções sugeridas, fornecidas pelo desenvolvedor. As sugestões serão exibidas quando você começar a digitar na entrada de texto ou usar as teclas Arrow Up
/ Arrow Down
.
Angular Autocomplete Example
O exemplo de preenchimento automático Angular abaixo gera uma lista suspensa de sugestões conforme os usuários começam a digitar o nome de uma cidade na caixa de texto de entrada.
Getting Started with Ignite UI for Angular Autocomplete
Para começar a usar o Ignite UI for Angular para Angular Components e a diretiva Autocomplete em particular, primeiro você precisa instalar Ignite UI for Angular. Em um aplicativo Angular existente, digite o seguinte comando:
ng add igniteui-angular
Para obter uma introdução completa ao Ignite UI for Angular, leia o tópico de introdução.
O próximo passo é importar o IgxAutocompleteModule e o IgxDropDownModule em nosso app.module. Se igxAutocomplete
for aplicado em um igxInput, o igxInputGroupModule também será necessário:
// app.module.ts
...
import {
IgxAutocompleteModule,
IgxDropDownModule,
IgxInputGroupModule
} from 'igniteui-angular';
// import { IgxAutocompleteModule, IgxDropDownModule, IgxInputGroupModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [
...,
IgxAutocompleteModule,
IgxDropDownModule,
IgxInputGroupModule,
....
],
...
})
export class AppModule {}
Como alternativa, a partir da 16.0.0
você pode importar a IgxAutocompleteDirective
como uma diretiva autônoma.
// home.component.ts
...
import { IgxAutocompleteDirective, IGX_INPUT_GROUP_DIRECTIVES, IGX_DROP_DOWN_DIRECTIVES } from 'igniteui-angular';
// import { IgxAutocompleteDirective, IGX_INPUT_GROUP_DIRECTIVES, IGX_DROP_DOWN_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: `
<igx-input-group>
<input igxInput name="towns" type="text" [igxAutocomplete]="townsPanel" />
<label igxLabel for="towns">Towns</label>
</igx-input-group>
<igx-drop-down #townsPanel>
<igx-drop-down-item *ngFor="let town of towns">
{{town}}
</igx-drop-down-item>
</igx-drop-down>
`,
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IgxAutocompleteDirective, IGX_INPUT_GROUP_DIRECTIVES, IGX_DROP_DOWN_DIRECTIVES]
})
export class HomeComponent {}
Agora que você importou o módulo ou a diretiva Ignite UI for Angular Action Strip, você pode começar com uma configuração básica do componente igxAutocomplete
.
Using the Angular Autocomplete
Para aplicar a funcionalidade de preenchimento automático a uma entrada, adicione a diretiva igxAutocomplete
, referenciando o menu suspenso:
<igx-input-group>
<input igxInput name="towns" type="text" [igxAutocomplete]="townsPanel" />
<label igxLabel for="towns">Towns</label>
</igx-input-group>
<igx-drop-down #townsPanel>
<igx-drop-down-item *ngFor="let town of towns">
{{town}}
</igx-drop-down-item>
</igx-drop-down>
Adicione a lista que será mostrada no dropdown. Se quiser que a lista seja filtrada enquanto digita, use a interface PipeTransform.
import { Component, Pipe, PipeTransform } from '@angular/core';
@Component({
selector: 'app-autocomplete-sample',
styleUrls: ['autocomplete.sample.css'],
templateUrl: `autocomplete.sample.html`
})
export class AutocompleteSampleComponent {
constructor() {
this.towns = [ 'New York', 'Washington, D.C.', 'London', 'Berlin', 'Sofia', 'Rome', 'Kiev',
'Copenhagen', 'Paris', 'Barcelona', 'Vienna', 'Athens', 'Dublin', 'Yerevan',
'Oslo', 'Helsinki', 'Stockholm', 'Prague', 'Istanbul', 'El Paso', 'Florence', 'Moscow' ];
}
}
@Pipe({ name: 'startsWith' })
export class AutocompletePipeStartsWith implements PipeTransform {
public transform(collection: any[], term = '') {
return collection.filter((item) => item.toString().toLowerCase().startsWith(term.toString().toLowerCase()));
}
}
Note
O igxAutocomplete
usa o igxDropDown
como um provedor para as opções disponíveis, o que significa que todos os recursos do componente suspenso podem ser usados no preenchimento automático.
Disable Angular Autocomplete
Você pode desabilitar o preenchimento automático Angular usando a entrada IgxAutocompleteDisabled
:
<igx-input-group>
<input igxInput name="towns" type="text"
[igxAutocomplete]='townsPanel'
[igxAutocompleteDisabled]="disabled"/>
<label igxLabel for="towns">Towns</label>
</igx-input-group>
Autocomplete Settings
O posicionamento do menu suspenso igx-autocomplete
, a estratégia de rolagem e a saída podem ser configurados usando IgxAutocompleteSettings
.
No exemplo de Autocomplete Angular a seguir, posicionaremos o dropdown acima da entrada e desabilitaremos as animações de abertura e fechamento. Estamos usando ConnectedPositioningStrategy
para isso:
<igx-input-group class="autocomplete">
<label igxLabel for="cinema">Cinema</label>
<input igxInput name="cinema" type="text"
[igxAutocomplete]="townsPanel"
[igxAutocompleteSettings]="settings"/>
</igx-input-group>
<igx-drop-down #townsPanel maxHeight="300px">
<igx-drop-down-item-group *ngFor="let town of towns" [label]="town.name">
<igx-drop-down-item *ngFor="let cinema of town.cinemas" [value]="cinema">
{{cinema}}
</igx-drop-down-item>
</igx-drop-down-item-group>
</igx-drop-down>
export class AutocompleteComponent {
public settings = {
positionStrategy: new ConnectedPositioningStrategy({
closeAnimation: null,
openAnimation: null,
verticalDirection: VerticalAlignment.Top,
verticalStartPoint: VerticalAlignment.Top
})
};
public towns = [
{
name: 'New York',
cinemas: [
'Regal Cinemas',
'Village East Cinema',
'Roxy Cinema',
'The Paris Theatre'
]},
{
name: 'Los Angeles',
cinemas: [
'Arc Light',
'Pacific Cinerama Dome',
'New Beverly Cinema',
'Downtown Independent'
]},
{
name: 'Seattle',
cinemas: [
'Central Cinema',
'Grand Illusion Cinema',
'Ark Lodge Cinemas',
'Skyway Outdoor Cinema'
]}
];
}
Note
A estratégia de posicionamento padrão é AutoPositionStrategy
e o menu suspenso é aberto de acordo com o espaço disponível.
Se tudo correr bem, você deverá ver isto no seu navegador:
Keyboard Navigation
- ⬆ / ⬇ ou digitar a entrada abrirá o menu suspenso, se estiver fechado.
- ⬇- moverá para o próximo item suspenso.
- ⬆- moverá para o item suspenso anterior.
- ENTER confirmará o item já selecionado e fechará o menu suspenso.
- ESC fechará o menu suspenso.
Note
Quando o Angular autocomplete abre, então o primeiro item da lista é selecionado automaticamente. O mesmo é válido quando a lista é filtrada.
Você também pode ver como nosso WYSIWYG App Builder ™ simplifica toda a história do design ao código em 80% usando componentes Angular reais.
Compatibility support
A aplicação da diretiva igxAutocomplete
decorará o elemento com os seguintes atributos ARIA:
- role="combobox" - função do elemento, onde a diretiva é aplicada.
- aria-autocomplete="list" - indica que as sugestões de conclusão de entrada são fornecidas na forma de lista
- Atributo aria-haspopup="listbox" para indicar que
igxAutocomplete
pode exibir um contêiner para sugerir valores. - aria-expanded="true"/"false" - valor dependendo do estado recolhido do menu suspenso.
- aria-owns="dropDownID" - id do menu suspenso usado para exibir sugestões.
- aria-activedescendant="listItemId" - o valor é definido como o id do elemento da lista ativa atual.
O componente drop-down
, usado como provedor de sugestões, exporá os seguintes atributos ARIA:
- role="listbox" - aplicado no contêiner do componente
igx-drop-down
- role="group" - aplicado no contêiner do componente
igx-drop-down-item-group
- role="option" - aplicado no contêiner do componente
igx-drop-down-item
- aria-disabled="true"/"false" aplicado nos contêineres de componentes
igx-drop-down-item
eigx-drop-down-item-group
quando eles estão desabilitados.
Estilização
Cada componente tem seu próprio tema.
Para estilizar o igxAutocomplete
, você precisa estilizar os componentes que o contêm. No nosso caso, esses são o input-group-theme e o drop-down-theme.
Dê uma olhada nas seções de estilo igxInputGroup
e igxDropdown
para entender melhor como estilizar esses dois componentes.
API Reference
Theming Dependencies
Additional Resources
Nossa comunidade é ativa e sempre acolhedora para novas ideias.