【问题标题】:IONIC Typescript - To delete item from firebase listIONIC Typescript - 从 Firebase 列表中删除项目
【发布时间】:2021-10-05 18:03:26
【问题描述】:

我有这样的 firebase(实时数据库)简单结构: 因为键值为“unit no”。

我的输出画面如下: 例如,当搜索单元号“1-2”时,可以列出按单元号过滤的项目。

当尝试点击特定项目的“确认收件人”时,我想从 firebase 中删除唯一的记录。

这是面临的问题:

1) 取消定义“item.unitno”和“item.trakno”的值 2) TypeError: Cannot read property 'unitno' of undefined

html

   <ion-row *ngFor="let item of result; let idx = index" class="text-content">
            <ion-col class="table-cell" size="3">{{item.unitno}}</ion-col>
            <ion-col class="table-cell" size="3">{{item.trackno}}</ion-col>
            <ion-col class="table-cell" size="3">{{item.mydate | date: 'yyyy-MM-dd'}}</ion-col>
            <button class="btn btn-primary btn-xs" (click)="receiveparcel(item)" size="3">Confirm by recipient</button>

TS

 async receiveparcel(item) {  
       
                var db = firebase.database().ref('post/');
                var query = firebase.database().ref('post/').orderByKey();

                query.once("value").then(function(snapshot) {

                  snapshot.forEach(function(childSnapshot) {
                    var pkey = childSnapshot.key; 
                    var chval = childSnapshot.val();
            
                    //check if remove this child
                    
                     if(chval.unitno == item.unitno && chval.trackno == item.trackno){
                      console.log(item.unitno);
                      console.log(item.trackno);

                      console.log(pkey);
                      console.log(chval);
                     

                      db.child("post/" +pkey).remove();
                 
                       return true;
                    }
                  });
                });
              }

最新:

抱歉我的错误。忘记保存 html。现在设法解决类型错误。即使单击“receiveparcel”功能,特定的 firebase 记录仍未删除。

修改后: 修改后的结果。没有发现错误但是记录仍然无法删除?

【问题讨论】:

  • receiveparcel 函数中,尝试记录 item 并分享输出是什么?
  • 您好,先生,可以在“最新”下查看我的更新吗?由于 html 的类型错误没有保存.sorry for error。但是记录无法删除```console.log(item.unitno); => 1-2 控制台.log(item.trackno); =>1rurur58588 ```
  • 承诺存在一些问题。尝试从我的答案中复制代码并运行它。

标签: typescript firebase ionic-framework firebase-realtime-database


【解决方案1】:

如果您使用的是.remove(),代码看起来是正确的,它在forEach 循环中返回一个没有await 的promise。您不能在 for each 循环中使用 await 我建议将这些删除操作添加到对象中,然后使用 update 方法,如下所示:

async receiveparcel(item) {  
  var db = firebase.database().ref('post/');
  var query = firebase.database().ref('post/').orderByKey();

  const snapshot = await query.once("value")
  const updateObj = {}

  snapshot.forEach(function (childSnapshot) {
    var pkey = childSnapshot.key; 
    var chval = childSnapshot.val();
            
    //check if remove this child
    if(chval.unitno == item.unitno && chval.trackno == item.trackno) {
      console.log(item.unitno, item.trackno);
      console.log("pkey:", pkey, "& chval:", chval);
                     
      updateObj[pkey] = null
      // don't return from within forEach loop
    }
  });

  await db.update(updateObj)
  return true
}

【讨论】:

  • 您好,先生,请在“修改后”检查我的结果。记录仍然没有被删除.. –
  • @brook18 你能在await db.update(updateObj) 之前请console.log(updateObj) 并分享输出吗?
  • { post/-MfkicdEtDyjLtRlAt9r: null }
  • @brook18 哦,对了。你能试试updateObj[pkey] = null吗?删除 /posts 更新答案。
  • @brook18 太好了。如果你喜欢我的回答,你也可以点赞:)
猜你喜欢
  • 2016-08-17
  • 2020-02-16
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
相关资源
最近更新 更多