이전 경로의 컨트롤러의 기능 (예 : /items
를) 평가를 다시하고 컨트롤러가 표시 템플릿에 사용되는변경 노선 내가 경로를 가지고
$scope.pathForItem = function (item) {...}
방법을 가지고 있습니다 목록의 각 항목에 대한 경로 이 페이지에서 링크를 클릭하여 경로를 변경하면 각도 코드가 $rootScope.$apply()
어딘가에서 호출되어 $scope
에 정의 된 일부 기능을 다시 평가하게됩니다. 문제는 이전 경로 컨트롤러의 범위에서 함수를 다시 평가하므로 페이지의 모든 항목에 대해 한 번만 pathForItem
을 호출한다는 것입니다. 대개 큰 문제는 아니지만 불필요하지만 오류는 발생하지 않습니다.
그러나 로그 아웃하려고하면 오류가 발생합니다. pathForItem
은 user
개체가 존재한다고 가정하고 (이 주소는 authService
에서 발생) 일반적으로이 경로의 resolve
함수에 사용자가 있는지 확인하기 때문에 작동합니다. 이제 로그 아웃하려고하면 Angular는 $rootScope.$apply()
으로 전화를 걸어 모든 항목에 대해 pathForItem
번으로 다시 전화를 시도합니다. 그러나 어딘가에 중간에, 사용자가 마지막으로 제거됩니다, authService.currentUser()
null
를 반환 시작하고 pathForItem
인상 오류에 대한 모든 추가 호출 ...
그것이 정말 그런 일을해야 하는가? Angular의 $rootScope.$apply
은 이전 경로의 컨트롤러에도 기능을 호출해야합니까? 일반적인 해결 방법이 있습니까? 아니면 템플릿에 사용되는 모든 컨트롤러의 모든 기능이 항상 resolve
함수에서 검사 했는데도 실제로 사용하는 모든 개체가 실제로 있는지 확인해야합니까?
저는 Angular 1.3.10을 ngRoute와 함께 사용하고 있습니다.
'$ apply'는 경로에 대해 아무것도 모릅니다. 어떻게해야합니까? 차라리 모든 다이제스트주기 중에 함수가 호출된다는 점을 염두에 두어야합니다. 그것은 특별히 생각하지 않습니다. – zeroflagL
잘 피하기가 어렵습니다. 예를 들면 다음과 같습니다. http://plnkr.co/edit/B4sH8bZhRJmRdTP4UWGt?p=preview "두 번째"링크를 클릭하면 Angular는 여전히 "first()"를 호출하여 콘솔 출력을 확인합니다. 또한, 왜 3 번이나 부르는 지 모르겠지만 또 다른 문제입니다. – szimek
이상적으로'pathForItem'은 값이 아니라 함수입니다.물론 당신의 상황을 모르겠다. 그러나 나는'pathForItem'의 리턴 값이 매 다이제스트주기마다 변하지 않는다고 생각한다. 나는 그것이 로그인 한 사용자에 달려 있다는 인상을 받았는데, 이는 값이 전혀 변하지 않는다는 것을 의미합니다. – zeroflagL