$ firebaseObject中的toJSON如何工作?

时间:2015-06-17 09:27:35

标签: angularjs firebase angularfire

我从Kato's fiddle分叉了一个规范化示例,并将其更新为当前版本的AngularFire和Firebase,您可以see it here。我测试了一下,以便更好地理解$firebaseObject$firebaseArray的工作原理,我真的很了解它。

toJSON以外的$firebaseObject除外。

所以我在控制器中有这个小代码:

$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实际上包含相同的数据,但我想知道:

  1. 为什么JSON甚至在这里打电话,虽然我还没有将任何数据发送回服务器(至少从我的角度来看)。
  2. 为什么<pre ng-bind="singlePost | json"></pre>仅显示postData数据?

1 个答案:

答案 0 :(得分:2)

<强> 1。的toJSON

    调用
  • .toJSON()来删除以$firebaseObject$firebaseArray开头的$$$的属性和方法。它将对象序列化为有效的JSON数据。
  • 这样做是为了显示<pre> div中的数据以进行调试,而不使用$ methods。
  • this answer from Kato

<强> 2。数据差异

  • <pre ng-bind="singlePost | json"></pre>仅显示postData,因为只有postData的{​​{1}}属性(this)被传递到行{$firebaseObject中的.toJSON()方法1}}
  • 与在$firebaseUtils.toJSON(this.postData);
  • 中传递整个对象(包括postDatauserData属性)相比
  • 如果您记录console.log('singlePost', $scope.singlePost);,您应该会看到相同的结果。