在JQuery $ destroy之前执行一个函数

时间:2014-10-17 18:57:21

标签: javascript jquery html5 angularjs

我有一段像这样的代码

$('#id').on('$destroy', function(){
                ...
            }
})

我希望这个函数被destroy事件扼杀,但是它应该在destroy之前执行,现在它在它之后执行。有谁能建议如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

使用$broadcast作为代理来致电$destroy

function beforeDestroy(event, options) 
  {
  console.log(String().concat("Event: ", event,"Old: ", options.oldValue, "New: ", options.newValue);
  /* 
  execute stuff before calling destroy 
  ....
  ....  
  */

  /* Manually call destroy when done */
  $scope.$broadcast("$destroy");
  }

/* Bind Callback */
$scope.$on("beforeDestroy", beforeDestroy)

/* Trigger Broadcast Event */
$scope.$broadcast("beforeDestroy", { newValue: $scope.id++, oldValue: $scope.id });
  

$ transclude函数不再将$ destroy事件处理程序附加到已转换的内容,因此如果使用直接DOM操作(例如jquery remove()方法)从DOM中删除已转换的元素,则不会自动销毁关联的转义作用域

     

如果要显式删除指令中已编译的DOM元素,因此可能包含子(和转换)范围,那么您有责任获取范围并同时销毁它。 / p>      

建议的方法是在您希望以这种方式操作的任何DOM元素周围创建一个新的子范围,并在删除其内容时销毁这些范围 - 然后将自动销毁和清除任何子范围。

     

请注意,操作DOM的所有内置指令(ngIf,ngRepeat,ngSwitch等)都已遵循此最佳实践,因此如果您只使用这些指令来操作DOM,那么您不必担心此更改

<强>参考