angular.js $destroy 이벤트 - 수동으로 바인드 해제해야 합니까?
각도 베이스가 자동으로 워쳐와 스코프 이벤트의 바인드를 해제하는지 알아보려고 합니다.$scope.$on(...)또는$scope.$watch(...)스코프가 파괴되었을 때?
다음과 같은 코드가 있다고 가정합니다.
$scope.$on('someEvents', handleSomeEvent);
$scope.$watch('someProperty', handleSomePropertyChange);
$destroy 이벤트가 범위에서 트리거된 경우 이러한 감시자와 이벤트를 수동으로 바인드 해제해야 합니까?
의 Angular 설명서에 따르면:
스코프와 그 자식 스코프가 부모 스코프에서 영구적으로 분리되도록 하려면 스코프로 호출해야 합니다.따라서 호출을 통해 모델 변경 검출 및 수신기 알림에 참여하지 않습니다.
또한.
또한 제거는 현재 범위가 가비지 수집에 적합함을 의미합니다.
그래서...$destroy()모든 워쳐와 청취자가 삭제되고 스코프를 나타내는 오브젝트가eligible for garbage collection.
예를 들어destroy() 소스코드가 표시됩니다.
forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));
듣는 사람을 다 없애야죠
@glepretre에서 설명한 바와 같이 컨트롤러 내의 워처 및 청취자에게 적용됩니다.위의 문서 페이지에 다음과 같이 표시됩니다.
AngularJS에서는 $destroy jQuery 이벤트도 있습니다.이 이벤트를 사용하면 요소가 DOM에서 삭제되기 전에 DOM 바인딩을 청소할 수 있습니다.
그래서 디렉티브에 특정 청취자가 있다면$destroy이벤트 및 필요한 청소를 직접 수행합니다.
스코프가 컨트롤러에 있는 경우 각도로 바인딩을 해제합니다.또는 반환된 함수를 호출하여 이벤트를 바인딩 해제할 수 있습니다.
var myevent = $scope.$on('someEvents', handleSomeEvent);
myevent() ; // unbind the event
http://docs.angularjs.org/api/ng/function/angular.bind
앞서 답변 드린 바와 같이 Angular는 가능한 한 청소를 잘 해드립니다.그래서 만약 당신이 한다면$scope.$on('someEvents', handleSomeEvent);스코프가 파기되면(예를 들어 앱의 다른 페이지/뷰로 이동했을 경우), 이벤트는 자동적으로 삭제됩니다.
하지만 한 가지 중요한 점은$rootScope물론 앱을 종료하지 않는 한 파괴되지 않습니다.그래서 만약 당신이 한다면$rootScope.$on('someEvents', handleSomeEvent);이벤트를 듣는 장소에 따라서는 이벤트를 직접 삭제해야 할 수 있습니다.
- 에 있는 경우
controller또는directive그 후 수동으로 삭제해야 합니다.그렇지 않으면 매번 이 파일을 인스턴스화할 수 있습니다.controller, 새로운 행사가 첨부될 것이며handleSomeEventwill be called many times여러 번 전화할 것이다 - if in a 에 있는 경우
service, 그러면 서비스를 수동으로 제거할 필요가 없습니다. 상 렇 동 제 요 으 습 없 니 then할, are always다 you do필 to삭 it services manually수 need그가 remove로항이듯singleton(각각각각)service,factory, ...의 모든 것을 끝내기 위해...결국 모두 같은 것이 됩니다.)
언급URL : https://stackoverflow.com/questions/22169888/angular-js-destroy-event-should-i-manually-unbind
'programing' 카테고리의 다른 글
| 특정 제품 카테고리의 Woocommerce에서 카트 추가 버튼을 제거합니다. (0) | 2023.03.07 |
|---|---|
| Git - 푸시할 수 없음 - "![리모트 거부] 마스터 -> 마스터 (작업 디렉토리에는 스테이징되지 않은 변경이 있음)" (0) | 2023.03.07 |
| 리액트 라우터를 사용한 루트 변경을 방지하는 방법 (0) | 2023.03.07 |
| Angular material $mdToast 메시지 유형에 따라 Toast 색상을 변경하는 방법은 무엇입니까? (0) | 2023.03.07 |
| json.js와 json2.js의 차이점 (0) | 2023.03.07 |