什么是 $$hashKey 添加到我的 JSON.stringify 结果

问题描述

Angular 添加了这个来跟踪你的变化,所以它知道什么时候需要更新 DOM。

如果您使用angular.toJson(obj)而不是,JSON.stringify(obj)那么 Angular 会为您去除这些内部使用值。

此外,如果您将重复表达式更改为使用track by {uniqueProperty}后缀,Angular 根本不需要添加$$hashKey。例如

<ul>
    <li ng-repeat="link in navLinks track by link.href">
        <a ng-href="link.href">{{link.title}}</a>
    </li>
</ul>

永远记住你需要“链接”。表达的一部分-我总是倾向于忘记这一点。只是track by href肯定行不通。

解决方法

我曾尝试查看他们文档的Mozilla JSON stringify页面以及 SO 和
Google 上的此处,但没有找到任何解释。我已经使用JSON.stringify了很多次,但从未遇到过这个结果。

我有一个 JSON 对象数组:

[
    {
        "param_2": "Description 1","param_0": "Name 1","param_1": "VERSION 1"
    },{
        "param_2": "Description 2","param_0": "Name 2","param_1": "VERSION 2"
    },{
        "param_2": "Description 3","param_0": "Name 3","param_1": "VERSION 3"
    }
]

它附在我的$scope. 为了将POST它们作为一个参数,我使用了该JSON.stringify()方法并收到以下内容:

   [
        {
            "param_2": "Description 1","param_1": "VERSION 1","$$hashKey": "005"
        },{
            "param_2": "Description 2","param_1": "VERSION 2","$$hashKey": "006"
        },{
            "param_2": "Description 3","param_1": "VERSION 3","$$hashKey": "007"
        }
    ]

我只是对$$hashkey属性到底是什么感到好奇,因为我期望该方法中的内容更类似于以下内容stringify(即,没有$$hashkey):

[
    {
        "1":{
            "param_2": "Description 1","param_1": "VERSION 1"
        },"2":{
            "param_2": "Description 2","param_1": "VERSION 2"
        },"3":{
            "param_2": "Description 3","param_1": "VERSION 3"
        }
    }
]

我不确定这是否是一个因素,但我正在使用以下内容:

  • Angularjs 1.1.5,
  • jQuery 1.8.2
  • spring 3.0.4

我还在服务器端使用 Spring security 3.0.7。

它没有给我带来任何问题,但我想知道原因和原因$$hashkey