从 Firebase ListObservable 中移除对象
Remove object from a Firebase ListObservable
我正在开发一个 Angular2 应用程序,使用 Firebase 作为数据存储。第一步是使用集合并将对象推送到集合中:
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 observables 的组合。
编辑
我找到了一种删除对象的方法,但我仍然对它不满意:
模板如下所示:
<button class="btn btn-default (click)="deleteWeek(week.$key)">delete</button>
代码:
this.angularFire.database.object(`/weeks/${weekId}`).remove();
如何在不使用 Firebase 密钥的情况下删除对象,例如在用户输入上?是否需要再次查询该对象?如何使用ListObservable
?
直接删除对象
您可以通过将元素传递给 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/key(由 push
返回的 thenable 提供)传递给 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
的值。)
我正在开发一个 Angular2 应用程序,使用 Firebase 作为数据存储。第一步是使用集合并将对象推送到集合中:
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 observables 的组合。
编辑
我找到了一种删除对象的方法,但我仍然对它不满意: 模板如下所示:
<button class="btn btn-default (click)="deleteWeek(week.$key)">delete</button>
代码:
this.angularFire.database.object(`/weeks/${weekId}`).remove();
如何在不使用 Firebase 密钥的情况下删除对象,例如在用户输入上?是否需要再次查询该对象?如何使用ListObservable
?
您可以通过将元素传递给 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/key(由 push
返回的 thenable 提供)传递给 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
的值。)