在将事件推送到Firestore后,事件ID中的数据被包装在另一个事件(据说是map()对象)中。为什么会这样呢?访问事件时,我必须执行“ event.event.eventProperty”以访问我的信息。第二个事件是在我的数据库中定义的,但未在我的代码中定义,因此会导致错误“事件中不存在事件属性”。
我试图回溯整个事件创建过程,以查看是否意外将事件推错了。到目前为止,我还没有找到具体的问题。我尝试在代码的各个部分进行console.log(event),结果得到了正确的对象,但是在推送它时,firebase将数据嵌套在另一个事件对象中。 ''' 事件界面
export interface Event {
event_title?: String,
event_location?: String,
event_students?: String,
event_category?: String,
event_date?: String,
event_startTime?: String,
event_endTime?: String,
event_description?: String,
event_pictureURL?: String,
event_chatNumber?: Number,
event_goingCounter?: Number,
event_maybeGoingCounter?: Number,
event_creation_timeStamp?: Date ,
event_id?: Number,
createdBy?: String,
lastUpdate?: Number
}
``Firebase数据库服务''
createEvent(event: Event) {
this.eventCollectionRef.add({
event
})
.then(function() {
console.log("Event was successfully created!");
})
.catch(function(error) {
console.log("Error Creating Event: ", error);
});
}
'tab3(事件创建屏幕)'
createEvent() {
this.event = {
event_title: this.createEventForm.controls["event_title"].value,
event_location: this.createEventForm.controls["event_location"].value,
event_students: this.createEventForm.controls["event_students"].value,
event_category: this.createEventForm.controls["event_category"].value,
event_date: this.createEventForm.controls["event_date"].value,
event_startTime: this.createEventForm.controls["event_startTime"].value,
event_endTime: this.createEventForm.controls["event_endTime"].value,
event_creation_timeStamp: this.createEventForm.controls["event_creation_timeStamp"].value,
event_description: this.createEventForm.controls["event_description"].value,
event_pictureURL: "",
event_chatNumber: 0,
event_goingCounter: 0,
event_maybeGoingCounter: 0,
createdBy: this.user.uid
}
this.FirebaseDatabase.createEvent(this.event)
this.showToast("Event has been created.");
}
''``这是我从Firestore检索具有特定ID的事件的地方''
ngOnInit() {
event: Event;
this.firebaseDatabase.getEvent(this.id).subscribe( res => {
this.event = res
console.log(this.event["event"].event_category)
})
}
''GetEvent(id:string)定义''
getEvent(id:string){
return this.eventsCollection.doc<Event>(id).valueChanges().pipe(take(1), map(event => {
return event
}))
}
错误消息
预期:将我的事件对象按原样推送到Firestore。不要嵌套。
实际:事件对象嵌套在地图中。
答案 0 :(得分:0)
这是因为您调用add(...)
的方式。现在您有:
this.eventCollectionRef.add({
event
})
这是以下内容的简写语法:
this.eventCollectionRef.add({
event: event
})
所以这就是为什么您在数据库中看到额外的event
属性级别的原因。如果您不希望这样做,请删除{}
:
this.eventCollectionRef.add(event)