【问题标题】:delete row data from firebase in angular 4从角度4的firebase中删除行数据
【发布时间】:2018-07-26 03:19:06
【问题描述】:

我正在处理 Angular 4 项目我想从 firebase 中删除一个点击的行

以下是我的智能表代码

<ng2-smart-table [settings]="settings" [source]="source" (edit)="onEdit($event)" (delete)="onDelete($event)">

    </ng2-smart-table>

onDelete()函数如下

onDelete(event) {
console.log(event);
    if (window.confirm('Are you sure you want to delete?')) {
      this.service.deleteEnquiry(event.data);
    } else {
      event.confirm.reject();
    }
  }

我在服务中写了deleteEnquiry函数如下

deleteEnquiry(data){
console.log(data);
this.af.list('/enquirydata/').remove(data);
}

但它对我不起作用,它显示我在控制台中出现以下错误

ERROR Error: Expects a string, snapshot, or reference.

有什么帮助吗?

【问题讨论】:

    标签: typescript firebase firebase-realtime-database angularfire2 smart-table


    【解决方案1】:

    也检查这个文档:https://github.com/angular/angularfire2/blob/master/docs/rtdb/lists.md

    snapshotChanges() 它是什么? - 返回一个 Observable 数据作为一个同步数组 AngularFireAction[].

    你为什么要使用它? - 当您需要数据列表但又想保留元数据时。元数据为您提供了基础 DatabaseReference 和快照键。拥有快照的密钥可以更轻松地使用数据操作方法。由于 type 属性,此方法为您提供了与其他 Angular 集成(例如 ngrx、表单和动画)的更多功能。每个 AngularFireAction 上的 type 属性对于 ngrx reducer、表单状态和动画状态很有用。

    你什么时候不使用它? - 当您需要比数组更复杂的数据结构时,或者如果您需要在发生更改时对其进行处理。此数组与 Firebase 数据库中的远程和本地更改同步

    【讨论】:

      【解决方案2】:

      由于您要传递事件对象,因此您需要将 event.value 传递给服务

       onDelete(event) {
        console.log(event.value);
        if (window.confirm('Are you sure you want to delete?')) {
          this.service.deleteEnquiry(event.value);
        } else {
          event.confirm.reject();
        }
       }
      

      改变你的服务

       deleteEnquiry(data){
          console.log(data.$key);
          this.af.list(`/enquirydata/${data.$key}`).remove(data);
        }
      

      【讨论】:

      • 你能不能尝试在 onDelete() 方法中控制 event.value!
      • 其给出未定义
      • 对于console.log(event) 它给出行{index: 0, data: {…}, dataSet: DataSet, isSelected: true, isInEditing: false, …}cells: (5 ) [Cell, Cell, Cell, Cell, Cell]data: {add: "", college: "", degree: "", degreeyop: "", email: "", ...}index: 0isInEditing: falseisSelected: true_dataSet: DataSet {columnSettings: {…}, data: Array(2), columns: Array(5), rows: Array(2), willSelect: "", …}__proto_: Object
      • firebase 密钥在哪里?
      • 我不明白
      【解决方案3】:

      试试这个

      deleteEnquiry(data){
          console.log(data.$key);
          this.af.list(`/enquirydata/${data.$key}`).remove(data);
       }
      

      【讨论】:

      • 大括号的闭合位置
      • 对不起,我改变了我的答案。立即查看
      • Dashboard1Component.html:14 ERROR 错误:需要字符串、快照或引用。
      • 我想看看这个控制台 console.log(data);
      • 如果我使用了 console.log(data.$key) 它显示未定义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2015-01-16
      • 2013-09-28
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多