다음 HTML 코드는 ul을 21 개의 전화로 채 웁니다.
<li ng-repeat="phone in phones" ng-class="{'digestTest': countDigestOccurences(phone) }">
<p>{{phone.snippet}}</p>
</li>
countDigestOccurences
사전을 사용하여 countDigestOccurences()
전화 당 호출 횟수를 추적하는 JavaScript 메서드입니다 .
$scope.countDigestOccurences = function(phone){
var phoneFound = false;
$.each($scope.digestOccurencesPerPhone, function(){
if(this.phone.id == phone.id){
phoneFound = true;
this.occurences++;
}
});
if(!phoneFound)
{
$scope.digestOccurencesPerPhone.push({
phone: phone,
occurences: 1
});
}
}
이 방법을 통해 countDigestOccurences가 전화 당 4 번 호출된다는 것을 분명히 알 수 있습니다 . 나는 내 인생을 위해 왜 4 번 호출되는지 알 수 없습니다.
최신 정보:
전화 항목의 HTML이 다음과 같더라도주기 수는 4로 유지됩니다.
<li ng-repeat="phone in phones "
class="thumbnail phone-listing" ng-class="{ 'digestTest': countDigestOccurences(phone), 'digestTestAgain': randomMethodDoesNothing() }">
<p>{{phone.snippet}}</p>
</li>
각도 컴파일 뷰에 식을 참조 할 때, 등 ng-class="function()"
, ng-model="toto"
A는 $watch
그것을 생성된다. 모든 다이제스트주기에서 시계는 모델에 변경 사항이 있는지 확인하기 위해 더티 검사를 통해 평가됩니다.
따라서 ng-repeat에는 전화 컬렉션에 한 명의 감시자, 각 전화 인스턴스에 한 명의 감시자, 기능에 대한 한 명의 감시자가 있습니다. 뷰의 함수는 범위 변수가 아니기 때문에 angular는 함수의 결과가 변경되었는지 알 수 없으므로 (함수에서 다른 범위 변수에 영향을 미칠 수 있음) 각 다이제스트주기에 대한 함수 결과를 재평가합니다. .
그래서 당신은 전화 + 전화 + 기능 + 마지막 다이제스트 사이클이 정상인지 확인합니다 : 4 사이클
드문 경우를 제외하고는 뷰에서 함수를 사용하지 않는 것이 좋습니다. 대신 함수의 결과를 범위 변수에 저장하고이 변수를 뷰에 렌더링하십시오.
업데이트 :
다음 논의로 인해 ng-class 지시문에 대해 하나의 watch si 만 생성되었으며 ng-class의 값에 해당합니다. 즉,와 함께 ng-class="{'toto' : functionOne(), 'titi' : functionTwo()}"
, 시계가 켜져 있습니다 : {'toto' : functionOne(), 'titi' : functionTwo()}
. AngularJs 지시어 코드에서 발행 :scope.$watch(attr[name], ngClassWatchAction, true);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다