즉, ng-repeat에서 일회성 바인딩을 사용할 때 속성 트랙 by는 값을 추가하지 않는다는 의미입니다.
track by
과 일회성 바인딩 간에는 상관 관계가 없습니다.
- 바인딩 전문가가
카운트 감소 한 번
track by
목록이 서버에서 업데이트와 변화가 (항목의 id
에 따라 말할 수)
자신 없습니다 일단 DOM을 다시 렌더링하지 않습니다
번으로 바인딩 ng-repeat
ae ng-repeat="friend in ::friends"
은 일단 안정화되면 friends
의 재 계산을 중지합니다 (첫 번째 다이제스트주기 후 (표현식 결과가 정의되지 않은 값인 경우).
<li ng-repeat="friend in ::friends ">{{friend.name}}</li>
과 : 예를 들어
$scope.friends = [{
id: 0,
name: 'Ben'
}];
$timeout(function(){
$scope.friends.push({
id: 3,
name: 'Chen'
});
},1000);
결과 :
당신은 볼 수 Ben
하지만 한 시간이 정지 바인딩 때문에 일초 지연 후 변화가 없다 ng-repeat
watcher. 일반적으로 고정 목록에 사용합니다. 목록 항목은 항목 자체에 의지하지에 대한
Demo 1
BTW, 그것을 작동합니다.
한 번 $$hashKey
제거되지 않습니다 바인딩하지만 당신은 쓸 수 있습니다 :
<li ng-repeat="friend in ::friends track by friend.id">
Demo 2
실제로 사용할 때 ('것을 NG-repeat' 의미 'track by '없이 일회성 바인딩) 모든 객체에'$$ hashKey' 속성을 추가함으로써 과도한 작업을하고 있습니다. 왜냐하면리스트는 안정적으로 간주되면 보이지 않기 때문입니다. – SimonSimCity
@SimonSimCity 전혀 아닐 때, 한 번 바인딩하면 'ng-repeat'항목 수에서 watch가 삭제됩니다. 그래서 당신이 새로운 아이템을 추가/제거한다면 아무 일도 일어나지 않을 것입니다. 다른 쪽에서'track by'는 아이템의 DOM을 다시 렌더링하지 않습니다 ** content ** 아이템의 id가 그대로 유지되는 경우 –
동의합니다.따라서 일회성 바인딩을 사용할 때는 '$$ hashKey'생성이 불필요하지만 뷰를 안정화하는 데 필요하지 않습니다 (데이터가 두 번의 '$ digest'주기 사이에서 변경되지 않도록해야합니다). 이 후에는 관찰자가 제거되고 새 항목이나 순서가 변경되지 않습니다. 'friend in :: friends'라는 수단은 여전히'$$ hashKey'를 생성해야하므로'track by'를 여기에 추가하면 성능이 향상 될 것입니다. 맞습니까? – SimonSimCity