Descripción general de la directiva de autocompletar Angular
Angular Autocompletar es una directiva del cuadro de búsqueda que permite a los usuarios buscar, filtrar y seleccionar fácilmente un elemento de una lista de sugerencias mientras escriben. Rico en funciones, admite vinculación de datos, filtrado, agrupación, opciones de personalización de la interfaz de usuario y otras funcionalidades integradas para que los desarrolladores puedan crear una experiencia de búsqueda intuitiva de autocompletar.
La directiva igxAutocomplete
proporciona una forma de mejorar la entrada de texto mostrando un igxDropDown
con opciones sugeridas, proporcionadas por el desarrollador. Las sugerencias se mostrarán una vez que comience a escribir el ingreso de texto o use las teclas Arrow Up
o Arrow Down
.
Angular Autocomplete Example
El siguiente ejemplo Angular Autocompletar genera una lista desplegable de sugerencias cuando los usuarios comienzan a escribir el nombre de una ciudad en el cuadro de texto de entrada.
Getting Started with Ignite UI for Angular Autocomplete
Para comenzar con Ignite UI for Angular para componentes Angular y la directiva Autocompletar en particular, primero debe instalar Ignite UI for Angular. En una aplicación Angular existente, escriba el siguiente comando:
ng add igniteui-angular
Para obtener una introducción completa a la Ignite UI for Angular, lea el tema de introducción.
El siguiente paso es importar IgxAutocompleteModule e IgxDropDownModule en nuestro app.module. Si se aplica igxAutocomplete
en un igxInput, también se requiere igxInputGroupModule:
// 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 {}
Alternativamente, a partir de 16.0.0
puede importar IgxAutocompleteDirective
como una directiva independiente.
// 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 {}
Ahora que ha importado la directiva o el módulo Ignite UI for Angular Action Strip, puede comenzar con una configuración básica del componente igxAutocomplete
.
Using the Angular Autocomplete
Para aplicar la funcionalidad de autocompletar a una entrada, agregue la directiva igxAutocomplete
, haciendo referencia al menú desplegable:
<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>
Agregue la lista que se mostrará en el menú desplegable. Si desea que la lista se filtre mientras escribe, utilice la interfaz 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
igxAutocomplete
utiliza igxDropDown
como proveedor de las opciones disponibles, lo que significa que todas las capacidades del componente desplegable se pueden usar en el autocompletado.
Disable Angular Autocomplete
Puede desactivar el autocompletado Angular utilizando la 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
El posicionamiento del menú desplegable, la estrategia de desplazamiento y la salida igx-autocomplete
se pueden configurar usando IgxAutocompleteSettings
.
En el siguiente ejemplo Angular Autocompletar, colocaremos el menú desplegable encima de la entrada y desactivaremos las animaciones de apertura y cierre. Estamos utilizando ConnectedPositioningStrategy
para esto:
<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
La estrategia de posicionamiento predeterminada es AutoPositionStrategy
y el menú desplegable se abre según el espacio disponible.
Si todo salió bien, deberías ver esto en tu navegador:
Keyboard Navigation
- ⬆ / ⬇ o escribir la entrada abrirá el menú desplegable, si está cerrado.
- ⬇- pasará al siguiente elemento desplegable.
- ⬆- pasará al elemento desplegable anterior.
- ENTER confirmará el elemento ya seleccionado y cerrará el menú desplegable.
- ESC cerrará el menú desplegable.
Note
Cuando se abre el autocompletar Angular, el primer elemento de la lista se selecciona automáticamente. Lo mismo es válido cuando se filtra la lista.
También puede ver cómo nuestro WYSIWYG App Builder ™ agiliza toda la historia del diseño al código en un 80 % utilizando componentes Angular reales.
Compatibility support
La aplicación de la directiva igxAutocomplete
decorará el elemento con los siguientes atributos ARIA:
- role="combobox" - rol del elemento donde se aplica la directiva.
- aria-autocomplete="list" - indica que las sugerencias para completar la entrada se proporcionan en forma de lista
- Atributo aria-haspopup="listbox" para indicar que
igxAutocomplete
puede abrir un contenedor para sugerir valores. - aria-expanded="true"/"false": valor que depende del estado contraído del menú desplegable.
- aria-owns="dropDownID" - ID del menú desplegable utilizado para mostrar sugerencias.
- aria-activededescendiente="listItemId" - el valor se establece en la identificación del elemento de la lista activa actual.
El componente drop-down
, utilizado como proveedor de sugerencias, expondrá los siguientes atributos ARIA:
- role="listbox" - aplicado en el contenedor del componente
igx-drop-down
- role="group" - aplicado en el contenedor del componente
igx-drop-down-item-group
- role="option" - aplicado en el contenedor del componente
igx-drop-down-item
- aria-disabled="true"/"false" se aplica en los contenedores de componentes
igx-drop-down-item
yigx-drop-down-item-group
cuando están deshabilitados.
Estilismo
Cada componente tiene su propio tema.
Para darle estilo a igxAutocomplete
, debe diseñar los componentes que lo contienen. En nuestro caso, necesitamos usar tanto el tema del grupo de entrada como el tema desplegable.
Eche un vistazo a las secciones de estilo igxInputGroup
e igxDropdown
para comprender mejor cómo diseñar esos dos componentes.
API Reference
Theming Dependencies
Additional Resources
Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.