我开始编写一个Web应用程序,用户对象有一个_username
键,所以它在开头。
如果我将对象添加到firebase数据库,那么它就不存在了 - 其他一切都是。
为什么这个键/值对不在数据库中?我的意思是它是有效的JSON,不是吗? 我的意思是除了简单地重命名之外还有其他解决方案吗?
我推送到数组的对象具有以下结构:
{
_username:"",
history:[],
// ...
}
我的代码:
var users = $firebaseArray(ref.child("user"));
// adding user
users.$add($scope.session.user);
// logging afterwards - also no '_username'
// logging on init
users.$loaded().then(function (data) {
$log.debug(data);
});
除了下划线var ...
之外,所有内容都已存储答案 0 :(得分:3)
看起来像$add()
(或更具体地说是$firebaseUtils.toJSON()
)drop属性,其名称以_
开头。快速查看此信息的方法是:
console.log($firebaseUtils.toJSON(user));
解决方法是通过JavaScript SDK直接将用户对象写入数据库:
ref.child("user").push(user);
此 使用有效的键名写入所有属性,包括前缀为_
的属性。
由于AngularFire构建于同一JavaScript SDK之上,因此它会立即获取更改。
答案 1 :(得分:2)
这是一个设计决策,基于这样一个事实,即声明私有变量的常见JavaScript约定是用_
作为前缀。
有关为什么它与默认SDK行为不同的上下文,请记住AngularFire正在创建可以扩展的类实例,并提供客户端功能(不仅仅是用于数据传输的原始JSON对象)。因此,我们的目标是尽可能简单明了地扩展和使用$ firebaseArray和$ firebaseObject,并使保存和服务器同步尽可能透明。
为此,您需要一个简单的约定来将“本地”或私有内容与您要发送到服务器的内容分开。由于$在技术上由Angular库保留,_
仍然是在ES6之前为私有变量和方法添加前缀的适当方法。
如果有很多人在这里遇到问题,我们可以重新考虑,但鉴于它已经用这种方式实施了将近3年,这是对它的第一次评论,我怀疑它很好。