Значение ключа меняется - PullRequest
0 голосов
/ 19 апреля 2020

Моя база данных Firebase выглядит так: database.

Итак, что я пытаюсь сделать в файле html, так это то, что сначала при использовании <mat-tab *ngFor="let cat of categories" [label]="cat.label"> я отображаю панель вкладок, которая позволяет мне переключаться между различными категориями. Как видно из базы данных, есть три ключа категорий: backend, frontend и bigdata. При выполнении <p>{{ cat.key }}</p> выводится текущая категория выполнения, которая является правильной cat.key is displayed.

Затем через <ng-container *ngFor="let co of getCoursesByCategory(cat.key)"> Я пытаюсь выбрать курсы, категория которых соответствует категории, выполняемой в настоящее время используя функцию. Но когда функция выполняется, и я пытаюсь записать значение пройденного ключа, я не получаю одно и то же значение, вместо этого категория всех курсов регистрируется на консоли три раза. Я думаю, что это означает, что он загружает все курсы для каждого ключа категории. console output.

Почему на консоли отображается не только значение ключа, которое я прошел, и почему отображается категория каждого курса? Почему это происходит? Как я могу отфильтровать курсы по категории? Я просто хочу, чтобы курсы с категорией внешнего интерфейса отображались на вкладке внешнего интерфейса, базовые - на вкладке внутреннего интерфейса, а большие - на вкладке больших данных.

courses.component. html: -

<mat-tab-group>
    <mat-tab *ngFor="let cat of categories" [label]="cat.label">
        <div class="cardList">
            <p>{{ cat.key }}</p>
            <hr>
            <ng-container *ngFor="let co of getCoursesByCategory(cat.key)">
                    <p>{{ co.category }}</p>
            </ng-container>
        </div>
    </mat-tab>
</mat-tab-group>

course.component.ts: -

import { Component, OnInit, OnDestroy } from '@angular/core';
import { CategoryService } from 'src/app/modules/common/services/category.service';
import { CourseService } from '../../services/course.service';
import { mergeMap, map } from 'rxjs/operators';
import { Subscription } from 'rxjs';

@Component({
  selector: 'app-courses',
  templateUrl: './courses.component.html',
  styleUrls: ['./courses.component.css']
})
export class CoursesComponent implements OnInit, OnDestroy {

  categories: any[];
  courses: any[];
  sub: Subscription;

  constructor(private categoryService : CategoryService, private courseService : CourseService) { }

  ngOnInit() {
    this.sub = this.categoryService.getAllcategories()
    .pipe(
      mergeMap(categories => this.courseService.getAllCourses().pipe(
        map(courses => [categories, courses])
      ))).subscribe(([categories, courses]) => {
        this.categories = categories;
        this.courses = courses;
      });
  }

  getCoursesByCategory(key: any)
  {
      console.log(key);
      return this.courses.filter(course => course.category == key)
  }

  ngOnDestroy()
  {
    this.sub.unsubscribe();
  }

}
...