作者:000猫000故事 | 来源:互联网 | 2023-02-10 04:02
我搜索了许多论坛,问题,在doc但找不到正确的解决方案.
问题
使用angularfire2增加值的最佳方法是什么?
我看到我们可以使用[transaction()] []但实际上并不适用于angularfire2.还是快照?
user.service.ts
incrementLike(userToIncrementLike){
this.af.database.object('users/' + userToIncrementLike.uid).subscribe((userObject) => {
var newUser = {
likes: userObject.likes + 1
};
});
this.af.database.object('users/' + userToIncrementLike.uid).update(newUser);
}
我也试过这种方式:
incrementLike(userToIncrementLike){
let obs = this.af.database.object('users/' + userToIncrementLike.uid);
obs.subscribe((snapshot) => {
let newValue = (snapshot.$value) ? (snapshot.$value + 1) : 1;
obs.set(newValue);
});
}
非常感谢你的帮助和提示:)路易斯.
1> J. Adam Conn..:
没有必要定义对象或使用该update()
方法.该对象已存在于数据库中,因此您可以在其中进行处理.这实际上是为了transaction()
- 在数据位置处理数据,从而防止冲突; 例如,两个用户同时更新相同的值.
如果您愿意,也可以在路径中使用模板文字.:)(注意反引号而不是单引号.)
incrementLike(userToIncrementLike){
this.af.database.object(`users/${userToIncrementLike.uid}/likes`).query
.ref.transaction(likes => {
if (likes === null) {
return likes = 1;
} else {
return likes + 1;
}
})
}
2> Sifeng..:
"angularfire2 V5"解决方案:
incrementLike(userToIncrementLike){
this.af.database.object(`users/${userToIncrementLike.uid}/likes`)
.query.ref.transaction((likes => {
if (likes === null) {
return likes = 1;
} else {
return likes + 1;
}
})};