Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En este ejercicio abordaremos 2 temas: input de fechas y listas desplegables con filtrado y
ordenamiento.
import {
MdButtonModule,
MdCardModule,
MdDatepickerModule,
MdNativeDateModule,
MdInputModule,
MdAutocompleteModule } from '@angular/material';
3. Modificamos el admin-usuarios-component
Dado que en Angular fue eliminado el pipe para ordenar listas (debido al mal uso que le
daban, el cual hacía la aplicación más lenta), tenemos que crear el nuestro. Lo ideal es
usarlo en las listas que de verdad lo requieran, es decir, en listas de muchos elementos.
El pipe lo usaremos en las listas de géneros de videos y en el tipo de video.
1. Primero creamos el pipe ordenarArreglo en la carpeta pipes/
/**
* Método para ordenar un arreglo de string
* @param arreglo
*/
transform(arreglo: string[]) {
if (arreglo.length >0) {
let arregloOrdenado: string[] = arreglo.sort((n1, n2) => {
if (n1 > n2) {
return 1;
}
return 0;
});
return arregloOrdenado;
}
}
}
/**
* Método que asigna a cada lista desplegable de filtrado un método para llevar a cabo el
filtro
*/
asignarFiltradoListasDesplegables() {
this.lista_tipo_usuario_filtrado = this.formUsuarios.get('tipoUsuario').valueChanges
.startWith(null)
.map(val => this.filtrarListaDesplegable(val, 'tipoUsuario'));
}
/**
* Método que filtra un valor en una lista general
* @param val : valor
* @param tipo : Identificador de la lista
*/
filtrarListaDesplegable(val: string, tipo: string) {
switch (tipo) {
case 'tipoUsuario':
return val ? this.lista_tipo_usuario.filter(s =>
s.nombre.toLowerCase().indexOf(val.toLowerCase()) === 0)
: this.lista_tipo_usuario;
default:
break;
}
/**
* Método para validar que lo que se escriba en los campos de listas desplegables
* estén dentro de los elementos establecidos
*/
validarListasDesplegables() {
let nombre = this.formUsuarios.get('tipoUsuario').value;
let nombre_corto = '';
switch (nombre) {
case this.lista_tipo_usuario[0].nombre:
nombre_corto = this.lista_tipo_usuario[0].nombre_corto;
this.usuario.tipoUsuario = nombre_corto;
break;
case this.lista_tipo_usuario[1].nombre:
nombre_corto = this.lista_tipo_usuario[0].nombre_corto;
this.usuario.tipoUsuario = nombre_corto;
break;
default:
// Si el valor ingresado no corresponde a ninguno de esos dos se genera un error
this.mensajesError.push('El campo Tipo de usuario contiene una opción que no
pertenece a la lista desplegable.');
this.formUsuarios.get('tipoUsuario').setErrors({
validacionLista: 'Solo puede elegir un elemento de la lista desplegable.'
});
this.erroresFormulario['tipoUsuario'] = 'Solo puede elegir un elemento de la lista
desplegable.';
break;
}
En el constructor llamamos a
this.asignarFiltradoListasDesplegables();
this.validarListasDesplegables();
Recursos extras:
● Pipes
● MdDataPicker
● MdAutocomplete