【问题标题】:Child directive not receiving $destroy event when parent is destroyed当父级被销毁时,子级指令未收到 $destroy 事件
【发布时间】:2016-04-25 11:01:04
【问题描述】:

我有一个属性指令附加到我的应用程序模板之一中的元素。当我离开这个模板时,与之关联的控制器会收到一个销毁事件。但是,该指令似乎也没有收到此事件。有什么方法可以在指令中接收它?

模板:

<div ng-controller="myController">
   <div my-directive></div>
</div>

在控制器中:

$scope.$on('destroy', function(){
  console.log('This fires just fine');
})

在指令的链接函数中:

scope.$on('destroy', function(){
  console.log('This will not fire');
})

element.on('destroy', function(){
  console.log('This will not fire either');
})

我发现几年前的一个问题与我的问题非常相似,但它被标记为已解决:https://github.com/angular/angular.js/issues/683

【问题讨论】:

  • 我有一次遇到了类似的问题,最终广播了一个我在子范围内监听的自定义销毁事件。不知道它打破了多少“规则”,但它解决了我留下孩子的问题。
  • 啊,那行得通。似乎应该有更好的方法来处理这个问题。
  • 我同意,感觉很“hacky”。我为此苦苦挣扎(特别是当需要在混合应用程序中从 jQuery 中“销毁”时)并且找不到更好的方法。很想听听其他社区的意见 :) 这是经过大量研究和失败的努力后我能想到的最好的。
  • 我不认为这是完全相同的问题,答案并没有解决问题——指令中也没有调用element.on('destroy')

标签: angularjs destroy


【解决方案1】:

当父元素被销毁时,element.on('$destroy)scope.$on('$destroy') 都将在指令中调用。问题在于监听 'destroy' 而不是 '$destroy'

【讨论】:

  • 该死的,你刚刚救了我!
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
相关资源
最近更新 更多