Angularjs 从Firebase ListObservable中删除对象

Angularjs 从Firebase ListObservable中删除对象,angularjs,firebase,firebase-realtime-database,angularfire2,Angularjs,Firebase,Firebase Realtime Database,Angularfire2,我正在开发一个Angular2应用程序,使用Firebase作为数据存储。第一步是使用集合并将对象推入集合: this.weeks$ = angularFire.database.list("/weeks"); this.weeks$.push({ id: ScheduleComponent.weekId(), }); 我现在想从集合中删除一周。我是否必须查询Firebase中的对象并将其删除?或者有没有办法直接从列表Observable中删除对象 应该没那么难吧 我试图查询数据库,但

我正在开发一个Angular2应用程序,使用Firebase作为数据存储。第一步是使用集合并将对象推入集合:

this.weeks$ = angularFire.database.list("/weeks");
this.weeks$.push({
    id: ScheduleComponent.weekId(),
});
我现在想从集合中删除一周。我是否必须查询Firebase中的对象并将其删除?或者有没有办法直接从
列表Observable
中删除对象

应该没那么难吧

我试图查询数据库,但这删除了整个集合:

this.angularFire.database.list('/weeks', {
    query: {
        id: weekId
    }
}).remove();
或者我必须使用
ListObservable
上的filter操作符来获取对象并删除它吗?我正在尝试以下方法:

this.weeks$
    .find(week => week.id == weekId)
    .do(
        week => console.log(week)
        // here the delete code
    ).subscribe();
但是没有预期的结果

我做错了什么?我假设这是不知道如何使用Firebase Angular 2绑定和不知道如何正确处理rx观测值的组合


编辑

我找到了删除对象的方法,但我仍然不满意: 模板的外观如下所示:

<button class="btn btn-default (click)="deleteWeek(week.$key)">delete</button>

如何在不使用Firebase密钥的情况下删除对象,例如在用户输入时?是否需要再次查询该对象?如何使用
ListObservable
直接删除对象?

您可以通过将元素传递到
remove
从列表中删除元素。例如,这将删除第一个元素:

this.weeks$=angularFire.database.list(“/weeks”);
这个星期$
.first()
.subscribe((list)=>this.weeks$.remove(list[0]);
您还可以将保留的快照传递给
删除

this.weeks$=angularFire.database.list(“/weeks”,{preserveSnapshots:true});
这个星期$
.first()
.subscribe((list)=>this.weeks$.remove(list[0]);
您还可以将推送ID/键(由
推送
返回的表格提供)传递到
删除

this.weeks$=angularFire.database.list(“/weeks”);
让key=this.weeks$.push({
id:ScheduleComponent.weekId(),
}).钥匙;
此.weeks$.remove(键);
也可从项目本身获取密钥:

this.weeks$=angularFire.database.list(“/weeks”);
这个星期$
.first()
.subscribe((list)=>this.weeks$.remove(list[0].$key));

(请注意,此答案中的代码并不合理;它只是显示如何获得传递给
remove
的值。)

出于好奇:如果周已经有一个ID,我假设它是唯一的,为什么不将周存储在其ID下?Hi@FrankvanPuffelen你能举例说明如何做到这一点吗?谢谢,仅供参考-为了使用first(),我们必须“导入'rxjs/add/operator/first'”
this.angularFire.database.object(`/weeks/${weekId}`).remove();