[javascript] 내 JSON에 추가 된 $$ hashKey는 무엇입니까?

나는 찾고 시도 모질라 JSON 캐릭터 라인 화 등 여기 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하나의 paramater 내가 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"
        }
    ]

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 and Spring 3.0.4 and Spring security 3.0.7 on the Server side

그것은 나에게 문제를 일으키지 않지만 나는 그 원인과 이유를 알고 싶습니다. $$hashkey



답변

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확실하게 작동하지 않습니다.


답변

유스 케이스 (결과 객체를 X2JS에 공급)에서 권장되는 접근법

data = angular.toJson(source);

$$hashKey속성 을 제거하는 데 도움이 되지만 결과는 더 이상 X2JS에서 처리 할 수 ​​없습니다 .

data = angular.copy(source);

$$hashKey속성도 제거 되었지만 결과는 X2JS의 매개 변수로 사용할 수 있습니다.


답변

일반적으로 ng-repeat 지시문과 함께 제공됩니다. 돔 조작하기 AngularJS는 특별한 id를 가진 객체를 플래그합니다.

이것은 Angular와 공통입니다. 예를 들어 ngResource를 사용하여 객체를 얻는 경우 객체에 모든 리소스 API가 포함되며 $ save 등의 메서드가 표시됩니다. 쿠키를 사용하면 AngularJS가 __ngDebug 속성을 추가합니다.


답변

데이터에 id를 추가하지 않으려는 경우 배열의 인덱스를 추적하여 값 대신 배열의 위치에 따라 항목을 키 지정할 수 있습니다.

이처럼 :

var myArray = [1,1,1,1,1];

<li ng-repeat="item in myArray track by $index">


답변

Angular 1.3 이상을 사용하는 경우 ng-repeat에서 “track by”를 사용하는 것이 좋습니다. “track by”를 사용하는 경우 Angular는 배열의 객체에 “$$ hashKey”속성을 추가하지 않습니다. 배열의 무언가가 변경되면 angular는 ng-repeat에 대한 전체 DOM 구조를 다시 만들지 않고 대신 배열의 값에 대해 DOM의 일부를 다시 만듭니다.


답변

업데이트 : Angular v1.5에서 track by $index가 링크를 사용하는 대신 표준 구문으로 사용되어 ng-repeat듀피 오류가 발생했습니다.

나는 이것을 중첩으로 보았고 ng-repeat아래는 효과가있었습니다.

<tbody>
    <tr ng-repeat="row in data track by $index">
    <td ng-repeat="field in headers track by $index">{{row[field.caption] }}</td>
</tr>


답변

다음은 객체에서 $$ hashKey를 쉽게 제거하는 방법입니다.

$scope.myNewObject = JSON.parse(angular.toJson($scope.myObject))

$scope.myObject -$$ hashKey를 제거 할 때 작업을 수행하려는 객체를 나타냅니다.

$scope.myNewObject -수정 된 원본 객체를 새 객체에 할당하여 필요에 따라 사용할 수 있도록합니다.