Firebase-在删除项目时调用child_added

时间:2018-06-20 21:16:08

标签: javascript angular firebase firebase-realtime-database

我有一个post的列表,我用.on('child_added')来获取它们,问题是我只想在某项为post的>添加,而不是删除,但是,即使帖子被删除,.on('child_added')也会被调用。就我而言,这不是我所需要的。

这是我的功能:

if(fromClick) { this.subscription.off(); this.firstRun = true;}
this.postFeed = new Array();
this.subscription = this.database.database.ref('/posts/'+this.locationId)
   .orderByChild('created')
   .limitToLast(10);

this.subscription.on('child_added', (snapshot) => {
   this.postFeed.push(snapshot.val());
});

因此它显示最后一个10,然后在添加项目时也将其添加到数组,但是在删除项目时会再次调用它。

如何防止这种情况?这样通话只会发生在添加了post的电话上?

1 个答案:

答案 0 :(得分:1)

如果您要拨打电话:

this.database.database.ref('/posts/'+this.locationId)
   .orderByChild('created')
   .limitToLast(10);

您正在创建一个包含10个最新帖子的查询。如果您删除其中之一,则另一则成为最近发布的第十个帖子,因此您会得到一个child_added

我唯一能想到的就是只获得10次,然后执行limitToLast(1)

this.database.database.ref('/posts/'+this.locationId)
   .orderByChild('created')
   .limitToLast(10)
   .once("value", function(snapshot) {
     snapshot.forEach(function(child) {       
       // These are the initial 10 children
     });
   });
this.database.database.ref('/posts/'+this.locationId)
   .orderByChild('created')
   .limitToLast(1)
   .on("child_added", function(snapshot) {
     // This is the latest child, but this will also fire when you remove the current latest
   });