如何从Firebase实时数据库列表中删除数据项?
实现Firebase实时数据库列表项删除功能
嘿,我来帮你搞定这个删除功能!你现在的问题是用valueChanges()获取的数据只有纯值,没有Firebase节点的唯一key,而删除数据必须依赖这个key才能精准定位要删的项。咱们一步步来改:
第一步:修改数据获取方式,带上节点key
把你控制器里的订阅代码改成下面这样,用valueChanges({idField: 'id'})可以自动给每个数据项加上id字段,这个值就是Firebase生成的唯一key:
arrData = []; constructor(public navCtrl: NavController, private fdb: AngularFireDatabase) { // 加上idField配置,让每个item自带Firebase节点的key this.fdb.list("/schools/").valueChanges({idField: 'id'}).subscribe(data => { this.arrData = data; }) }
如果你更习惯用snapshotChanges()(能拿到更多节点元数据),也可以这么写:
this.fdb.list("/schools/").snapshotChanges().subscribe(actions => { this.arrData = actions.map(action => ({ id: action.key, // 提取节点key作为id ...action.payload.val() // 展开原数据字段 })); })
第二步:实现删除方法
在控制器里添加delete方法,用AngularFire的remove()方法,传入要删除项的id(也就是Firebase节点key):
delete(item: any) { // 确认item有id字段后,调用remove删除对应节点 this.fdb.list("/schools/").remove(item.id); }
这样点击列表项时,就会触发删除操作,Firebase实时数据库里对应的项会被移除,同时你的arrData会因为订阅自动更新,视图也会同步刷新~
内容的提问来源于stack exchange,提问作者MartinsB
相关产品推荐
相关产品推荐

