Angularjs $firebaseObject中的toJSON是如何工作的?

Angularjs $firebaseObject中的toJSON是如何工作的?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我从中派生了一个规范化示例,并将其更新为AngularFire和Firebase的当前版本。为了更好地理解$firebaseObject和$firebaseArray的工作原理,我进行了一些测试,我真正掌握了其中的诀窍 除了$firebaseObject中的toJSON 我在控制器中有一个小代码: $scope.singlePost = singleMergedPost('post2'); console.log('singlePost', $scope.singlePost); 输出通常为:

我从中派生了一个规范化示例,并将其更新为AngularFire和Firebase的当前版本。为了更好地理解
$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实际上包含相同的数据,但我想知道:

  • 虽然我还没有向服务器发回任何数据(至少在我看来是这样),但为什么这里还要调用toJSON呢
  • 为什么
    只显示
    postData
    数据

  • 1。toJSON

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

    2。数据差异

    • 仅显示postData,因为只有
      this
      postData
      属性(
      $firebaseObject
      )被传递到
      .toJSON()
      行中的
      $firebaseUtils.toJSON方法(this.postData)
    • 与在
      console.log('singlePost',$scope.singlePost')中传递整个对象(包括
      postData
      userData
      属性)相比
    • 如果您记录
      $scope.singlePost.postData
      ,您应该会看到相同的结果
    谢谢你的回答,但我对第一部分有点困惑。该手册指出,只有当数据被发送回服务器时,才会调用toJSON。但在我的示例中,我只是检索数据。
    toJSON
    只是将对象“转换为JSON”。手册在何处声明只有在数据发送回服务器时才会调用它?当您向另一台服务器发送同步数据时,它当然很有用,因为JSON是在web上传输数据的通用格式。不过,在本例中,它只是用于使对象在调试输出(代码)中“可读”。数据不会仅仅通过调用
    toJSON
    发送到服务器。它只是在更改“格式”。键以“$”开头的属性/方法在JSON格式中是无效的,这就是为什么
    toJSON
    将它们去掉的原因。toJSON—如果存在此方法,则JSON.stringify()将使用该方法解析发送回服务器的数据。手册上说toJSON只用于告诉Firebase哪些数据应该保存到数据库中。是的,所以当您的数据同步回Firebase服务器时,如果方法存在(据我所知),它会自动调用对象上的“toJSON”。但这并不意味着你不能在前端调用它。是的,它是一种由服务器用来解析它获取的数据的方法,但它也是一种客户端可以用来做同样事情的方法。