programing

angular.js $destroy 이벤트 - 수동으로 바인드 해제해야 합니까?

minxs 2023. 3. 7. 22:02
반응형

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, 새로운 행사가 첨부될 것이며handleSomeEvent will 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

반응형