我可以添加和检索项目,但是删除时,它删除整个节点,而是程序。
我尝试将密钥直接放在 this.programListRef.remove(key manually put here);
上,但仍然得到相同的结果。
然后我检查了programListRef
,似乎也没什么问题。
这是代码
export class ProgramService {
//list variables
programListRef: AngularFireList<Program>;
programList: Observable<Program[]>;
//object variables
programObjRef: AngularFireObject<Program>;
programObj: Observable<Program>;
constructor(private afDB: AngularFireDatabase) {
this.programListRef = afDB.list('programs');
//use snapshot changes.map to store key
this.programList = this.programListRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
)
);
}
getProgramList() {
return this.programList;
}
getProgramObj(id:string) {
this.programObjRef = this.afDB.object('programs/'+id);
this.programObj = this.programObjRef.valueChanges();
return this.programObj;
}
addProgramObj(programObj:Program) {
this.programListRef.push(programObj);
}
updateProgramObj(id:string, programObj:Program){
this.programListRef.update(id, programObj);
}
//The problematic code
deleteProgramObj(id:string){
this.programListRef.remove(id);
}
}
任何提示将不胜感激,谢谢您的阅读!
答案 0 :(得分:2)
尝试使用更新。
deleteProgramObj(id:string){
this.programListRef.update({id: null});
}
答案 1 :(得分:1)
tl; dr:未定义键,因此删除了整个节点。
所以看来错误就在我这边。 在我的HTML页面上,我使用ngFor列出了这些对象,并且对deleteClick的click函数中的programList的let obj使用了不同的名称。 如果未指定id,则会通过Undefined导致由于remove()方法而导致其删除整个节点的操作会删除所有内容。
AngularFire文档说:
“ 删除整个列表
如果您从.remove()中省略关键参数,则会删除整个列表。
const itemsRef = db.list('items');
itemsRef.remove();"