我试图在代码中实现角度可观察的数据服务,但我对这种方法有点困惑。
我有以下数据模型:主题——一对多——类别
主题
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(); }
我想知道与主题相关的范畴的可观察数据服务的写作。 在我的项目中,我使用了一个navbar,它是一个包含一个类别子列表的主题列表。创建新类别后,我想刷新列表和子列表。
下面是我对该类别的可观察数据服务的实际代码:
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; }
有什么反馈或例子可以帮助我吗?
事先谢谢你的帮助。
您将返回作为observable的\u主题,这是类型的新实例 BehaviorSubject<Theme[]> ,当您在主题中接收到它时,它将成为类型 BehaviourSubject<Theme[]> ,然后对其类别部分进行赋值,但作为一个整体,主题仍然是类型 行为主题<主题[]> . 但当您将其分配给此时,.\u类型 Observable<Category[]> ,这是不匹配的。 对于解决方案,您可以返回_主题.类别或者接收主题而不是类别。
BehaviorSubject<Theme[]>
BehaviourSubject<Theme[]>
行为主题<主题[]>
Observable<Category[]>
我希望这一定是造成类型不匹配。