Angular JS: отображение значений параметров мата после нажатия на мат-выбор

Добрый день!

Сейчас я работаю над проектом, основанным на покемонах.

Моя проблема, которую нужно решить прямо сейчас, состоит в том, чтобы иметь возможность отображать параметры мата после нажатия на соответствующий мат-выбор.

Функции для получения массива имен тренеров и массива покемонов (на 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?

Заранее спасибо!

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод OnInit компонента

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.

Eric Díaz 10.12.2022 17:57

Другие вопросы по теме