2015-01-24 5 views
2

그래서이 간단한 스크립트를 사용하여 문제를 격리했습니다. 나는 1.1.1 버전을 선택하면 각기 다른 버전의 테스트를 거쳤습니다. 추가 버튼을 원하는만큼 여러 번 칠 수 있습니다. 최신 버전은이 방법에 문제가있는 것 같습니다. 이것은 버그입니까, 보안 조치입니까 아니면 그냥 지침을 작성해야합니까? 이 fiddle에서 최신 버전을로드하고 있지만이 버전을 제거하고 1.1.1로 변경하면 제대로 작동합니다. 또한 1.2.1도 같은 문제가 있습니다. 모든 팁에 미리 감사드립니다.ng-click은 첫 번째 클릭 후 작동이 멈추지 만 이후 버전에만 적용됩니다.

HTML

<div ng-app="app"> 
    <div ng-controller="ctrl"> 
     <div ng-repeat="item in naam"> 
      <div>{{item}}</div> 
     </div> 
     <button ng-click="add()">add</button> 
    </div> 
</div> 

JS는

var app = angular.module("app", []); 

    app.controller("ctrl", function ($scope) { 
     $scope.naam = [ 
      "1", 
      "2"]; 
     $scope.add = function() { 
      var x = 3; 
      var y = 4; 
      $scope.naam.push(x, y); 
     } 

    }); 

답변

5

아니, 각도의 버그가 아니다. 사실, 배열에 동일한 키를 추가하려고하므로 Error: [ngRepeat:dupes] 오류가 발생하고 ng-repeat은 허용하지 않습니다.

그래서, 당신은 다음과 같은 track by을 사용해야합니다 :

여기
<div ng-repeat="item in naam track by $index"> 
     <div>{{item}}</div> 
    </div> 

는 upadated JSFiddle입니다.

+0

감사합니다. 나는 이전 버전이 이것을 허용했기 때문에 왜 이런 일이 일어 났는지 혼란스러워했다. 그래서 저를 이해해주십시오. 인덱스는 값 자체 대신 값을 반복하는 데 사용됩니다. 내가 맞습니까? – Michelangelo

+1

네, 맞습니다. FYI, 귀하의 코드가 AngleJS 1.2.x 이후로 더 이상 리피터에 중복 키를 허용하지 않기 때문에 이전 버전 1.1.1에서 작동하고 최신 버전에서는 작동하지 않는 이유. – lvarayut

+0

@LVarayut 흥미 롭습니다. NgRepeat API (1.2.x 이상)에서 언급 한 $ id() 함수의 동작은 무엇입니까? 예 :'item in items'는'$ id (item)'에 의해 item in track에 해당합니다. ? https : //docs.angularjs.org/api/ng/directive/ngRepeat – klode