jon*_*nie 281 javascript jquery json angularjs
我已经尝试查看他们的文档的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"
}
]
Run Code Online (Sandbox Code Playgroud)
附加到我$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"
}
]
Run Code Online (Sandbox Code Playgroud)
我很好奇究竟是什么是$$ hashkey,因为我期望与stringify方法中的以下内容更相似:
[
{
"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"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我不确定它是否是一个因素,但我正在使用 Angularjs 1.1.5, JQuery 1.8.2 and Spring 3.0.4 and Spring security 3.0.7 on the Server side
它不会引起任何问题,但我想知道原因和原因 $$hashkey
Dav*_*ike 525
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>
Run Code Online (Sandbox Code Playgroud)
只记得你需要"链接".表达的一部分 - 我总是倾向于忘记这一点.只是track by href
肯定不会工作.
rob*_*rse 70
在我的用例中(将生成的对象提供给X2JS)推荐的方法
data = angular.toJson(source);
Run Code Online (Sandbox Code Playgroud)
data = angular.copy(source);
Run Code Online (Sandbox Code Playgroud)
同时删除了$$hashKey
属性,但结果仍可用作X2JS的参数.
Tho*_*ons 37
它通常带有ng-repeat指令.为了进行dom操作,AngularJS标记具有特殊id的对象.
这在Angular中很常见.例如,如果您使用ngResource获取对象,您的对象将嵌入所有资源API,您将看到$ save等方法.对于Cookie,AngularJS将添加属性__ngDebug.
Mic*_*ård 23
如果您不想将id添加到数据中,则可以按数组中的索引进行跟踪,这将导致项目在数组中的位置而不是其值中键入.
像这样:
var myArray = [1,1,1,1,1];
<li ng-repeat="item in myArray track by $index">
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Angular 1.3或更高版本,我建议您在ng-repeat中使用"track by".如果使用"track by",Angular不会向数组中的对象添加"$$ hashKey"属性.您还可以获得性能优势,如果数组中的某些内容发生更改,angular不会为ng-repeat重新创建整个DOM结构,而是为数组中已更改的值重新创建DOM的一部分.
归档时间: |
|
查看次数: |
153966 次 |
最近记录: |