Добрый день!
Сейчас я работаю над проектом, основанным на покемонах.
Моя проблема, которую нужно решить прямо сейчас, состоит в том, чтобы иметь возможность отображать параметры мата после нажатия на соответствующий мат-выбор.
Функции для получения массива имен тренеров и массива покемонов (на service.ts)
getTrainersNames(): Observable<Array<string>>{
return this.http.get<Trainer[]>(`${this.apiUrl1}`).pipe(
map((entrenadores: Trainer[]) => {
return entrenadores.map((entrenador: Trainer) => entrenador.fullName);
})
);
}
getPokemonsOfATrainer(nombreEntrenador: string): Observable<Array<Pokemon[]>> {
return this.http.get<Trainer[]>(`${this.apiUrl1}?fullName=${nombreEntrenador}`).pipe(
map((entrenadores: Trainer[]) => {
return entrenadores.map((entrenador: Trainer) => entrenador.pokemons);
})
);
}
Функции для подписки на имена покемонов и тренеров, а также для назначения имени тренера функции getPokemonsOfATrainer (controller.ts)
// INSIDE ngOnInit
this.obtainData.getTrainersNames().subscribe({
next: (nombres: string[]) => {
this.trainerNames = nombres
},
error: (err: Error) => console.info('Hubo un error en el observable '),
complete: () => {
console.info('Observer got a complete notification')
},
});
this.obtainData.getPokemonsOfATrainer(this.assignTrainerName()).subscribe( {
next: (pokemones: Pokemon[][]) => this.pokemons = pokemones[0],
error: (err: Error) => console.info('Hubo un error en el observable '),
complete: () => console.info('Observer got a complete notification'),
});
// INSIDE ngAfterViewInit
assignTrainerName() {
// Get the selected value from the mat-select element
const selectedValue = this.attacksForm.controls['trainerName'].value;
// Check if the selected value is in the this.trainerNames array
const selectedTrainer = this.trainerNames.find(name => name === selectedValue);
console.info(selectedTrainer);
// If the selected value is in the array, assign it to this.trainerName
if (selectedTrainer) {
this.trainerName = selectedTrainer;
}
return this.trainerName;
}
И, наконец, нужный мат-выбор:
<!--INSIDE a form-->
<mat-form-field appearance = "standard">
<mat-label>Selecciona un pokemon</mat-label>
<mat-select matNativeControl formControlName = "pokemonName" #matSelect>
<mat-option *ngFor = "let pokemon of pokemons" [value] = "pokemon.name">
{{pokemon.name}}
</mat-option>
</mat-select>
</mat-form-field>
Как я могу показать значения mat-option?
Заранее спасибо!





this.attacksForm.controls['trainerName'].valueChanges.subscribe((x)=>{
this.obtainData.getPokemonsOfATrainer(this.assignTrainerName()).subscribe( {
next: (pokemones: Pokemon[][]) => this.pokemons = pokemones[0],
error: (err: Error) => console.info('Hubo un error en el observable '),
complete: () => console.info('Observer got a complete notification'),
});
})
добавьте вышеприведенную строку кода, чтобы после изменения значения trainName затем вызывался getPokemonsOfATrainer, чтобы получить данные и установить.
Большое спасибо за решение!!! Никогда не думал, что вы можете обернуть подписку внутри другой подписки, которая обнаруживает изменения в элементе mat-select.