Наблюдаемые службы данных с отношением "один ко многим"

Я пытаюсь реализовать Angular Observable Data Services в своем коде, но меня немного смущает такой подход.

У меня следующая модель данных: Тема --- один-ко-многим ---> Категория

Тема

export class Theme {
  _id: string;
  name: string;
  description: string;
  iconCode: string;
  categories: Category[];
  createdAt: Date;
  updatedAt: Date;

Категория

export class Category {
  _id: string;
  name: string;
  description: string;
  createdAt: Date;
  updatedAt: Date;

Я написал этот код для службы наблюдаемых данных темы:

export class ThemeStoreService {

  private _themes: BehaviorSubject<Theme[]> = new BehaviorSubject<Theme[]>([]);
  private dataStore: {
    themes: Theme[]
  };

  constructor(private themeBackendService: ThemeBackendService) {
    this.dataStore = { themes: [] };
    this._themes = new BehaviorSubject<Theme[]>([]);
  }

  get themes() {
    return this._themes.asObservable();
  }

И мне интересно, как писать Службу наблюдаемых данных категории, которая связана с Темой. В моем проекте я использую панель навигации, которая представляет собой список, тему, содержащую подсписок категорий. Я хочу обновить список и подсписок после создания новой категории.

  • Нужно ли мне также использовать BehaviorSubject для категории?
  • Как я могу связать эти два объекта?

Ниже мой фактический код для службы наблюдаемых данных категории:

export class CategoryStoreService {

  private _categories: Observable<Category[]>
  private dataStore: {
    categories: Category[]
  };

  constructor(private themeStoreService: ThemeStoreService) {
    this.dataStore = { categories: [] };
    this._categories = this.themeStoreService.themes.pipe(
      map(themes => {
        themes.forEach(theme => {
          theme.categories = this.dataStore.categories;
        })
      })
    )
  }

  get categories() {
    return this._categories;
  }

Есть отзывы или примеры, которые могут мне помочь?

Заранее спасибо за вашу помощь.

Тестирование функциональных 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
2
0
114
1

Ответы 1

Вы возвращаете _themes как наблюдаемый, который является новым экземпляром типа BehaviorSubject<Theme[]>, и когда вы получаете его в теме, он становится типа BehaviourSubject<Theme[]>, затем вы выполняете некоторое присвоение его части категории, но в целом тема остается с типом BehaviourSubject<Theme[]>. Но когда вы назначаете его this._categories типа Observable<Category[]>, это несоответствие. Для решения вы можете вернуть _themes.categories или получить темы вместо _categories.

Надеюсь, из-за этого возникает несоответствие шрифтов.

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