2015-06-11 3 views

ответ

5

В директиве, когда элемент удаляется из DOM, $ уничтожают событие генерируется , Внутри функции связи вашей директивы, вы можете сделать это: -

element.on('$destroy', function() { 
    // do stuff 
}); 

Для получения дополнительной информации и полный пример, обратитесь к документации here

EDIT: См this plunker, чтобы увидеть $ уничтожить в действии. Здесь я удаляю элемент через 2 секунды, а журнал уничтожается в консоли.

+0

Проверьте http://stackoverflow.com/questions/30778150/detect-if-dire ctive-was-removed-from-dom # comment49607117_30778318 – alexandernst

+0

Можете ли вы поделиться плунжером, чтобы мы могли видеть, что именно вы делаете. –

+0

Обновлен мой ответ рабочим плунжером. Я использую angular.element (который является оберткой вокруг jQuery/jqLite), чтобы удалить элемент, чтобы сохранить его в угловом мире. –

1

Когда ваша директива удалена из DOM, увольняется событие $destroy. Смотрите здесь https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope # $ уничтожить

В этом вопросе (Provide an example of scope's $destroy event?) я нашел следующий пример:

ctrl.directive('handleDestroy', function() { 
    return function(scope, tElement, attributes) {   
     scope.$on('$destroy', function() { 
      alert("In destroy of:" + scope.todo.text); 
     }); 
    }; 
}); 
+0

Я удаляю некоторые элементы (включая мою директиву с '$ ('selector'). Html (" ")', но моя директива не запускает этот обратный вызов. Может быть. .html ("") 'is not на самом деле удалить из DOM? Или, может быть, мне нужно каким-то образом применить изменение? – alexandernst

+0

Я также попытался с '.empty()', тот же результат. – alexandernst

+0

Вы могли бы попробовать две вещи: во-первых, не удаляйте элементы с простым jQuery, попробуйте директиву 'ng-if'. Если это не сработает, ознакомьтесь с некоторыми другими вопросами: http://stackoverflow.com/questions/26983696/angularjs-does-destroy-remove-event-listeners http: // stackoverflow .com/questions/13481992/does-remove-a-dom-element-remove-the-related-scope http://stackoverflow.com/questions/17855203/do-we-need-to-unbind-event-listeners- in-directives-when-angle-start-to-destro – 23tux