Angularjs $firebaseObject中的toJSON是如何工作的?
我从中派生了一个规范化示例,并将其更新为AngularFire和Firebase的当前版本。为了更好地理解Angularjs $firebaseObject中的toJSON是如何工作的?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我从中派生了一个规范化示例,并将其更新为AngularFire和Firebase的当前版本。为了更好地理解$firebaseObject和$firebaseArray的工作原理,我进行了一些测试,我真正掌握了其中的诀窍 除了$firebaseObject中的toJSON 我在控制器中有一个小代码: $scope.singlePost = singleMergedPost('post2'); console.log('singlePost', $scope.singlePost); 输出通常为:
$firebaseObject
和$firebaseArray
的工作原理,我进行了一些测试,我真正掌握了其中的诀窍
除了$firebaseObject
中的toJSON
我在控制器中有一个小代码:
$scope.singlePost = singleMergedPost('post2');
console.log('singlePost', $scope.singlePost);
输出通常为:
{
"postData": {
"bla": "blubb",
"dateCreated": 1397584465,
"title": "Another cool website",
"upvotes": 1,
"url": "http://www.google.com",
"user": "simplelogin:2"
},
"userData": {
"email": "kato@firebase.com",
"jobTitle": "Awesome Dude",
"name": "Kato Richardson"
}
}
但当我将toJSON
添加到$extend
时,输出是:
{
"bla": "blubb",
"dateCreated": 1397584465,
"title": "Another cool website",
"upvotes": 1,
"url": "http://www.google.com",
"user": "simplelogin:2"
}
$scope.singlePost实际上包含相同的数据,但我想知道:
只显示postData
数据1。toJSON
- 调用
以剥离以.toJSON()
或$
开头的$
或$firebaseObject
的属性和方法。它将对象序列化为有效的JSON数据李>$firebaseArray
- 这样做是为了显示
div中的数据以进行调试,而不使用$methods - 看李>
2。数据差异
仅显示postData,因为只有
的this
属性(postData
)被传递到$firebaseObject
行中的.toJSON()
$firebaseUtils.toJSON方法(this.postData)代码>
- 与在
console.log('singlePost',$scope.singlePost')中传递整个对象(包括
和postData
属性)相比代码>userData
- 如果您记录
,您应该会看到相同的结果李>$scope.singlePost.postData
toJSON
只是将对象“转换为JSON”。手册在何处声明只有在数据发送回服务器时才会调用它?当您向另一台服务器发送同步数据时,它当然很有用,因为JSON是在web上传输数据的通用格式。不过,在本例中,它只是用于使对象在调试输出(代码)中“可读”。数据不会仅仅通过调用toJSON
发送到服务器。它只是在更改“格式”。键以“$”开头的属性/方法在JSON格式中是无效的,这就是为什么toJSON
将它们去掉的原因。toJSON—如果存在此方法,则JSON.stringify()将使用该方法解析发送回服务器的数据。手册上说toJSON只用于告诉Firebase哪些数据应该保存到数据库中。是的,所以当您的数据同步回Firebase服务器时,如果方法存在(据我所知),它会自动调用对象上的“toJSON”。但这并不意味着你不能在前端调用它。是的,它是一种由服务器用来解析它获取的数据的方法,但它也是一种客户端可以用来做同样事情的方法。