问题描述
我认为使用map
我的主要问题是bks.fname未定义,因为路径错误。正确的路径是 [“ 05182020”]。Peeter。[-MCcGOMe0FT1IqvlCJkd] .fname
但是我将如何在模型中定义它?
**返回的Json,每个键都是动态的:**
05182020:
Peteer:
-MCcGOMe0FT1IqvlCJkd: //The start of the book model
date: "05/18/2020"
name: "Peteer"
service: "b"
shop: "Howards"
time: "10:00 AM"
模型:
export interface Books {
date?: string;
fname?: string;
lname?: string
name?: string;
service?: string;
shop?: string
time?: string;
}
export interface IDictionary<T> {
[index:string]: Books;
}
export interface Bookings {
[index:string]: Books;
}
export interface CalendarEvent<MetaType = any> {
id?: string | number;
start: Date;
end?: Date;
title: string;
color?: EventColor;
actions?: EventAction[];
allDay?: boolean;
cssClass?: string;
resizable?: {
beforeStart?: boolean;
afterEnd?: boolean;
};
draggable?: boolean;
Meta?: MetaType;
}
TS 注意:bks.fname和其他名称未定义,因为当前map((results)=>正在接受根对象,而不仅仅是Books模型。
Calaendar.component.ts
events$: Observable<CalendarEvent<IDictionary<Books>>[]>;
this.events$ = this.fs.getFullList2(this.shopName)
.pipe(
catchError(err => {
console.log(err)
return throwError(err);
}),first(),tap(results =>
console.log("bookings:",results[0])
),map((results) => {
return results.map((bks: Books) => {
return {
title: bks.fname + " " + bks.lname + " ---Time: " + bks.time + ",Service: " + bks.service,start: new Date(bks.date),color: colors.red,allDay: true,Meta: bks,//.time,};
}
);
}
));
fireserveice.ts
getFullList2(shop: string): Observable<any> {
return this.db.list(shop,ref=>ref.limitToFirst(1)).valueChanges()
}
解决方法
由于您的问题不清楚,因此很难提供帮助。您期望您的输出看起来像什么?您输入的内容(以一种绕过的方式)是一堆书。该流输出什么? CalendarEvent
或CalendarEvent
s的数组?
我在这里最好的猜测是在发现mergeMap
时一并输出CalendarEvent
。如果您希望输出为CalendarEvent
的数组,则需要切换回map()
而不是mergeMap()
我还没有测试过,但这是我最好的猜测,
mergeMap(results =>
results.flatMap(idObj =>
Object.values(idObj).flatMap(nameObj =>
Object.values(nameObj).map((book: Books) => ({
title: book.fname + " " + book.lname + " ---Time: " + book.time,service: book.service,start: new Date(book.date),color: colors.red,allDay: true,meta: book
}))
)
)
)
我希望您可以对此进行一些调整,使其适合您的需求。
一些与您的问题无关的事情,但也许很有趣。
1-此界面:
export interface IDictionary<T> {
[index:string]: Books;
}
完全没有道理。您根本没有使用泛型,因此我不会将其包括在内。
2-此界面:
export interface Bookings {
[index:string]: Books;
}
您的问题根本没有使用。
3-您的图书界面描述了一本书。这并不是真正的问题,但是对于一个函数返回Books
却只返回一本书来说,这是很奇怪的。例如
getBookById(id: number): Books {
// some code here
}
返回代表一本书的单个对象,但是方法签名暗示它返回了多本书。