때때로 $scope.$apply
내 코드에서 사용해야 하며 때로는 "다이제스트 진행 중"오류가 발생합니다. 그래서 저는이 문제를 해결하기 시작 했고이 질문을 발견했습니다 : AngularJS : $ scope. $ apply ()를 호출 할 때 이미 진행중인 오류 $ digest 방지 . 그러나 주석 (및 각도 위키)에서 다음을 읽을 수 있습니다.
If (! $ scope. $$ phase) $ scope. $ apply ()는 $ scope. $ apply ()가 호출 스택에서 충분히 높지 않다는 것을 의미합니다.
이제 두 가지 질문이 있습니다.
- 이것이 정확히 안티 패턴 인 이유는 무엇입니까?
- $ scope. $ apply를 안전하게 사용하려면 어떻게해야합니까?
"다이제스트가 이미 진행 중"오류를 방지하는 또 다른 "솔루션"은 $ timeout을 사용하는 것 같습니다.
$timeout(function() {
//...
});
그게 갈 길 이니? 더 안전한가요? 그래서 여기 진짜 질문이 있습니다. "이미 진행중인 다이제스트"오류의 가능성을 완전히 제거 할 수 있는 방법은 무엇입니까?
추신 : 동기가 아닌 비 angularjs 콜백에서만 $ scope. $ apply를 사용하고 있습니다. (내가 아는 한 변경 사항을 적용하려면 $ scope. $ apply를 사용해야하는 상황입니다)
scope
각도 내부에서 조작하는지 각도 외부에서 조작하는지 항상 알아야 합니다. 따라서 이것에 따르면 전화가 필요한지 여부를 항상 알고 있습니다scope.$apply
. 둘 다 각도 / 비 각도에 동일한 코드를 사용하는 경우와scope
조작, 당신이 항상 기본적으로 당신이 확인해야 할 경우가 생기면 ... 분리되어야한다, 잘못을하고있는scope.$$phase
, 코드가없는 올바른 방법으로 설계하고, '올바른 방법'을 할 수있는 방법은 항상있다