Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

119
Vistas
Filtrado bidireccional con control de formulario de autocompletado de AngularMaterial

Quiero crear un control de formulario de autocompletado de material angular con dos formas de filtrar las opciones seleccionables:

  1. La forma predeterminada, cuando el usuario escribe la entrada de texto, y solo las opciones que coinciden con el término de búsqueda serán visibles, como en los ejemplos en el sitio web de Angular Material.
  2. Encima del componente de autocompletar hay un control de formulario de selección de categoría. Cuando se elige una categoría, quiero mostrar solo los elementos en la categoría elegida y permitir que el usuario busque solo en estos elementos con la entrada de texto de autocompletar.

Aquí está mi código en la clase de componente:

 category = new FormControl(''); product = new FormControl(''); inwardForm = new FormGroup({ category: this.category, product: this.product, }); ngOnInit(): void { combineLatest([ this.inwardForm.get('product')!.valueChanges, this.inwardForm.get('category')!.valueChanges, ]).pipe( startWith(['', undefined]) ).subscribe(result=>{ console.log(result); }); }

Mi problema es que, después de inicializar el componente, cuando empiezo a escribir el componente de autocompletar, no sucede nada. Después de elegir una categoría en el componente de selección de categoría, se activa el archivo console.log. Después de elegir una categoría, y luego escribir para autocompletar, console.log se dispara nuevamente con cada pulsación de tecla.

Entonces, después de elegir una categoría, funciona como se esperaba, pero no quiero que la selección de categoría sea obligatoria. ¿Cual podría ser el problema?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En realidad, no importa cuál toques primero. combineLatest solo después de que los observables definidos en el interior emitan al menos una vez. Actualmente, ninguno emite desde el principio, por lo que debe interactuar con ambos para ver el registro de la consola. Veo que está tratando de encenderlo usando startWith , pero startWith debe estar en los controles de formulario en lugar de combineLatest :

 ngOnInit(): void { combineLatest([ this.inwardForm.get('product')!.valueChanges.pipe(startWith('')), this.inwardForm.get('category')!.valueChanges.pipe(startWith('')), ]) .subscribe((result) => { console.log(result); }); }

Aunque también podría simplemente escuchar el formulario principal, entonces no sería necesario combineLatest :

 this.inwardForm.valueChanges.subscribe(values => { console.log(values.product, values.category); })

¡Recuerda darte de baja!

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda