我正在开发一个使用 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 绑定(bind)和不知道如何正确处理 rx observables 的结合。
编辑
我找到了删除对象的方法,但我仍然不满意: 该模板如下所示:
<button class="btn btn-default (click)="deleteWeek(week.$key)">delete</button>
代码:
this.angularFire.database.object(`/weeks/${weekId}`).remove();
如何在不使用 Firebase key 的情况下删除对象,例如根据用户输入?并且是否需要再次查询该对象?如何使用ListObservable
直接删除对象?
最佳答案
您可以通过将元素传递给remove
来从列表中删除元素。例如,这将删除第一个元素:
this.weeks$ = angularFire.database.list("/weeks");
this.weeks$
.first()
.subscribe((list) => this.weeks$.remove(list[0]));
您还可以将保留的快照传递给删除
:
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);
该 key 也可以从项目本身获得:
this.weeks$ = angularFire.database.list("/weeks");
this.weeks$
.first()
.subscribe((list) => this.weeks$.remove(list[0].$key));
(请注意,此答案中的代码并不合理;它只是为了显示如何获取传递给 remove
的值。)
关于angularjs - 从 Firebase ListObservable 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124888/