代码之家  ›  专栏  ›  技术社区  ›  Vik

firebase实时数据库使用angularfire 2更新过滤器后的条目

  •  0
  • Vik  · 技术社区  · 7 年前

    "orders" : {
        "-LM5p4tl7Og_PMJOspZ-" : {
          "customer" : {
            "_name" : "Vik Kumar",
            "_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
          },
          "order" : {
            "_orderNumber" : "VikKumar-26954",
            "_orderStatus" : "Pending",
            "_orderTotal" : 500,
          }
        },
        "-LM5s1wRCvqWA1vsZONy" : {
          "customer" : {
            "_name" : "Vik Kumar",
            "_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
          },
          "order" : {
            "_orderNumber" : "VikKumar-11423",
            "_orderStatus" : "Pending",
            "_orderTotal" : 500,
          }
        },
        "-LM5sOHzjLeqFGFleMxq" : {
          "customer" : {
            "_name" : "Vik Kumar",
            "_uid" : "oSEYj0zrkhPCk9r7uwyOOkHcqe53"
          },
          "order" : {
            "_orderNumber" : "VikKumar-63772",
            "_orderStatus" : "Pending",
            "_orderTotal" : 500,
          }
        }
    }
    

    我在我的ionic应用程序中使用angularfire2,并过滤以下几个订单:

    getPendingOrders(dateStr:string){
        return new Promise((resolve, reject) =>
          {
            this.db.list('orders',
                         ref =>  ref.orderByChild("order/_date").equalTo(dateStr)
           ).valueChanges().subscribe(
            res => {
              resolve(res)
            },
            err => {
              console.log(err)
              reject(err)
            }
          )
          })
      }
    

    以上查询给我的答复如下

    [{"customer": {}, "order": {}}, {"customer": {}, "order": {}}]
    

    我可以在UI中呈现它,我希望最终用户能够更新属性“\u orderStatus”的值。问题在于我查询数据的方式,我丢失了识别特定对象的键来更新它。请告知

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joseph Wu    7 年前

    好的,不确定这是否有帮助,我认为您已经迁移到使用angularfire5.0。调用.valueChanges()将返回一个不带任何元数据的Observable(例如项键),您需要改用.snapshotChanges()调用:

    this.db.list(...)
        .snapshotChanges()
        .map(changes => {
          return changes.map(change => ({key: change.payload.key, ...change.payload.val()}));
        })
        .subscribe(...)