Firebase - 更新子值

时间:2017-09-21 21:54:25

标签: firebase firebase-realtime-database

我正在尝试更新Firebase中的子值。

这是HTML:

  <ion-item-group>
    <ion-item-divider color="light">We Need</ion-item-divider>
    <ion-item *ngFor="let list of lists" (click)="unlist()">{{list?.foodname}}</ion-item>
  </ion-item-group>

在TS中声明了数组:

export class HomePage implements OnInit {

  foods;
  lists;
  startAt = new Subject()
  endAt = new Subject()

TS中的功能是:

  unlist() {
    firebase.database().ref('/foods').child('state')
            .update({ state: "unlisted" });
  }

这是我的数据库

enter image description here

现在,触发此功能会将“状态”的子项添加到“食物”而不是更改预先存在的状态。我需要做些什么来完成这项工作?

2 个答案:

答案 0 :(得分:0)

firebase.database().ref('/foods').child('state')
        .update({ state: "unlisted" });

此处您正在引用位置foods/state。您有foods引用,然后拨打.child('state'),导航到state 的孩子foods - &gt; foods/states

您实际需要做的是:

firebase.database().ref('foods/foodID1')
        .update({ state: "unlisted" });

由此您引用位置foods/foodID1并在其中将孩子state更改为"unlisted"

如果您想更改foodID2的状态,则必须致电ref('foods/foodID2)。

firebase.database().ref('foods/foodID1')也可以像firebase.database().ref('/foods').child('foodID1')一样表示。 ref中字符串开头的斜杠是可选的。

答案 1 :(得分:0)

/*  Here is the simple method */
unlist() {
    from(foods).pipe(map(food => f.key), tap(key => {
        firebase.database().ref('/foods' + key).child('state')
            .update({
                state: "unlisted"
            });
    })).subscribe(val => {
        console.log("Finished updating")
    });
}

/* Merging updates into One subscription */
unlist() {
    merge(
        from(foods).pipe(map(food => f.key), map(key => {
            return fromPromise(firebase.database().ref('/foods' + key).child('state')
                .update({
                    state: "unlisted"
                }))
        }))
    ).subscribe(val => {
        console.log("Finished updating")
    })
}

我在这里使用了Observable库,因为你需要导入它们:

import { merge } from 'rxjs/observable/merge';
import { tap,map } from 'rxjs/operators';