База данных Firebase в реальном времени для обновления записи после фильтра с помощью angularfire 2 - PullRequest
0 голосов
/ 18 сентября 2018

Данные в БД в реальном времени имеют следующую структуру:

"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,
      }
    }
}

Я использую 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": {}}]

Я могу сделать это в пользовательском интерфейсе очень хорошо, и я хочу, чтобы конечный пользователь мог обновить значение свойства "_orderStatus".Проблема в том, как я запрашивал данные, потерял ключи, чтобы идентифицировать конкретный объект для его обновления.Пожалуйста, сообщите

1 Ответ

0 голосов
/ 25 сентября 2018

хорошо, не уверен, поможет ли это, я думаю, вы перешли на использование AngularFire 5.0.Вызов .valueChanges () вернет Observable без каких-либо метаданных (например, ключ элемента), вместо этого вам нужно использовать вызов .snapshotChanges ():

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