javascript - scope.$destroy 未被触发

标签 javascript angularjs angularjs-directive angularjs-scope

我创建了一个 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 解除绑定(bind)事件?

最佳答案

$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();

}

关于javascript - scope.$destroy 未被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427651/

相关文章:

javascript - 如何在 Angular Router UI 中使用非捕获组

javascript - 如何在 routeConfig 中使用 ngDoc 注释

javascript - Angular : How can I avoid tightly coupling stacked directives when both need values from parent scope?

javascript - 如何将实际对象(即对象的引用)传递给指令?

javascript - 如何创建指令模块名称的隔离范围?

javascript - 如何删除仅包含特定类名且不包含字符串内部内容的 html 标签(span)换行?

javascript - 使用javascript从 header 中删除javascript标签

javascript - 为什么对象在 Chrome DevTools 中不存在?

javascript - http.post 从 angularJS 到 c# Web api 的简单对象为 null 或所有属性均为 null

javascript - 输入事件监听器(onkeypress、onkeydown)在 Android 数字键盘中不起作用