我对JSON.stringify结果中添加的$$hashKey是什么感到困惑。
我对JSON.stringify结果中添加的$$hashKey是什么感到困惑。
我已经尝试在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_0": "Name 1", "param_1": "VERSION 1", "$$hashKey": "005" }, { "param_2": "Description 2", "param_0": "Name 2", "param_1": "VERSION 2", "$$hashKey": "006" }, { "param_2": "Description 3", "param_0": "Name 3", "param_1": "VERSION 3", "$$hashKey": "007" } ]
我只是想知道$$hashkey
属性到底是什么,因为我期望从stringify
方法中获得更类似以下的结果(即,没有$$hashkey
):
[ { "1":{ "param_2": "Description 1", "param_0": "Name 1", "param_1": "VERSION 1" }, "2":{ "param_2": "Description 2", "param_0": "Name 2", "param_1": "VERSION 2" }, "3":{ "param_2": "Description 3", "param_0": "Name 3", "param_1": "VERSION 3" } } ]
我不确定它是否是个问题,但我正在使用以下内容:
- Angularjs 1.1.5,
- JQuery 1.8.2
- Spring 3.0.4
我还在服务器端使用Spring security 3.0.7。
它对我没有任何影响,但我想知道$$hashkey
的原因。
admin 更改状态以发布 2023年5月25日
在我的使用案例中(将结果对象提供给X2JS),推荐的方法
data = angular.toJson(source);
帮助移除$$hashKey
属性,但结果将不能再由X2JS处理。
data = angular.copy(source);
移除了$$hashKey
属性,但结果仍可作为X2JS的参数使用。
Angular会添加这些内容来跟踪您的更改,以便知道何时需要更新DOM。\n\n如果您使用angular.toJson(obj)
而不是JSON.stringify(obj)
,那么Angular将为您删除这些内部使用值。\n\n此外,如果您更改重复表达式以使用track by{uniqueProperty}
后缀,则Angular根本不需要添加$$hashKey
。例如:\n\n
\n\n请始终记住需要表达式的“link”部分 - 我总是容易忘记。仅track by href
肯定不起作用。