具有一对多关系的可观察数据服务

时间:2018-06-23 17:58:49

标签: angular observable

我尝试在我的代码中实现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;

我为主题的Observable Data Service编写了以下代码:

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;
  }

有任何反馈或示例可以帮助我吗?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您将_themes返回为可观察的_themes,它是类型为BehaviorSubject<Theme[]>的新实例,当您在主题中收到该主题时,它的类型为BehaviourSubject<Theme[]>,则需要对其类别部分进行一些分配但总体而言,主题仍为BehaviourSubject<Theme[]>类型。但是,当您将其分配给类型为Observable<Category[]>的this._categories时,这是不匹配的。 对于解决方案,您可以返回_themes.categories或接收主题而不是_categories。

我希望这一定是造成类型不匹配的原因。