我正在使用Firebase作为数据存储区开发Angular2应用程序。第一步是使用集合并将对象推送到集合中:
this.weeks$ = angularFire.database.list("/weeks");
this.weeks$.push({
id: ScheduleComponent.weekId(),
});
我现在要从集合中删除一周。我是否必须为该对象查询Firebase并将其删除?或者有没有办法直接从ListObservable
删除对象?
不应该那么困难......
我试图查询数据库,但这删除了整个集合:
this.angularFire.database.list('/weeks', {
query: {
id: weekId
}
}).remove();
或者我是否必须使用ListObservable
上的过滤器运算符来获取对象并将其删除?我正在尝试以下方法:
this.weeks$
.find(week => week.id == weekId)
.do(
week => console.log(week)
// here the delete code
).subscribe();
但没有预期的结果?
我做错了什么?我假设它不知道如何使用Firebase Angular 2绑定而不知道如何正确处理rx observable。
修改
我找到了删除对象的方法,但我仍然对此不满意: 模板看起来如下:
<button class="btn btn-default (click)="deleteWeek(week.$key)">delete</button>
代码:
this.angularFire.database.object(`/weeks/${weekId}`).remove();
如何删除对象而不使用它的Firebase密钥,例如在用户输入?是否有必要再次查询对象?如何使用ListObservable
?
答案 0 :(得分:2)
您可以通过将元素传递给remove
来删除列表中的元素。例如,这将删除第一个元素:
this.weeks$ = angularFire.database.list("/weeks");
this.weeks$
.first()
.subscribe((list) => this.weeks$.remove(list[0]));
您还可以将保留的快照传递给remove
:
this.weeks$ = angularFire.database.list("/weeks", { preserveSnapshots: true });
this.weeks$
.first()
.subscribe((list) => this.weeks$.remove(list[0]));
您还可以将推送ID /密钥(由push
返回的可用者提供)传递给remove
:
this.weeks$ = angularFire.database.list("/weeks");
let key = this.weeks$.push({
id: ScheduleComponent.weekId(),
}).key;
this.weeks$.remove(key);
该项目本身也可以使用该键:
this.weeks$ = angularFire.database.list("/weeks");
this.weeks$
.first()
.subscribe((list) => this.weeks$.remove(list[0].$key));
(请注意,此答案中的代码并不合理;它只是用于说明如何获取传递给remove
的值。)