1

Я создал проблему plunkr demo. Проблема, с которой я столкнулся, довольно проста: вызов $ destroy вручную или удаление элемента не запускает событие $ destroy.

function link(scope, element, attrs) { 

    // call scope $destroy, However it doesn't fire the event 
    scope.$destroy(); 

    // This also won't fire $destroy 
    element.remove() 


    scope.$on("$destroy", function handleDestroy() { 
    console.log("I am destroyed") 
    }) 
} 

я еще больше запутался после прочтения этой answer. Если element также получает событие $ destroy, то почему люди отключают событие на scope $ destroy вместо element $ destroy?

ответ

2

Обратный вызов для $destroy событие еще не настроен в коде; так, что движение к линии перед вызовом scope.$destroy()

Таким образом, становится:

function link(scope, element, attrs) { 

    // this is fired when scope.$destroy() is called 
    scope.$on("$destroy", function handleDestroy() { 
    console.log("I am destroyed") 
    }); 

    // 
    scope.$destroy(); 

    // this will fire when element.remove() is called 
    element.on('$destroy', function(){ 
    console.log('elem destroyed'); 
    }); 

    // 
    element.remove(); 

} 
+0

Привет, я ценю ваш ответ, но 'element.remove()' не вызывает $ уничтожить –

+0

когда вы вызываете 'element.remove()', 'element.on ('$ destroy', ...' вызывается, а не 'scope. $ on ('$ destroy', ...)' Смотрите мое обновление выше в ответ. – Nihat

Смежные вопросы