我正在尝试更新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" });
}
这是我的数据库
现在,触发此功能会将“状态”的子项添加到“食物”而不是更改预先存在的状态。我需要做些什么来完成这项工作?
答案 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';