Quiero crear un control de formulario de autocompletado de material angular con dos formas de filtrar las opciones seleccionables:
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?
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!