Firebase实时数据库删除将删除所有内容,而不是单个项目

时间:2018-08-21 09:17:33

标签: javascript firebase firebase-realtime-database angularfire2

我可以添加和检索项目,但是删除时,它删除整个节点,而是程序。

我尝试将密钥直接放在 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);
  }

}

任何提示将不胜感激,谢谢您的阅读!

2 个答案:

答案 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();"