Przebiegłem przez bardzo "dziurę w króliczej dziurze" Pytanie kątowe dzisiaj nie mogłem znaleźć odpowiedzi. Z dokumentów $scope
można zarejestrować procedurę obsługi zdarzeń pod numerem "$destroy"
, która jest wywoływana tuż przed zniszczeniem lunety. W ten sposób, można wyrejestrować obsługi zdarzeń tak:
var deregister = $scope.$on('myCustomEvent', function() {
// do some crazy stuff
});
$scope.$on('$destroy', function() {
deregister();
});
Jednak $scope.$on('$destroy', ...)
musi stworzyć swój własny program obsługi. Czy to jest automatycznie niszczone, czy też musisz wykonać następujące czynności, aby je zniszczyć?
var deregister = $scope.$on('myCustomEvent', function() {
// do some crazy stuff
});
var deregisterDestroy = $scope.$on('$destroy', function() {
deregister();
deregisterDestroy();
});
Tak, jest zniszczony - oczywiście, jeśli odniesie się do czegokolwiek zewnętrznego, sam handler (a więc wszystko, co ma w swoim zamknięciu) nie zostanie zwolniony (tak jak wszędzie indziej). –
Sądzę, że następne pytania byłyby następujące: (a) czy konieczne jest wyrejestrowanie go, i (b) jeśli tak, to czy można go wyrejestrować w sposób opisany powyżej? – jdotjdot
Naa, masz po prostu nieskończoną rekursję - nie musisz się wyrejestrowywać, ponieważ zakres ulega zniszczeniu. Jestem pewien, że niedługo ktoś, kto ma więcej czasu, udzieli przyzwoitej i szczegółowej odpowiedzi :) –