在JQuery$destroy之前执行函数
Executing a function before JQuery $destroy
我有一段类似的代码
$('#id').on('$destroy', function(){
...
}
})
我希望这个函数由destroy事件触发,但它应该在destroy之前执行,现在它正在destroy之后执行。有人能建议如何实现这一点吗?
使用$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事件处理程序附加到transclude内容,因此,如果使用直接DOM操作(如jquery remove()方法)从DOM中删除transclude元素,则关联的transclude作用域将不会自动销毁。
如果您想显式删除指令中已编译的DOM元素,并且这些元素可能包含子(和transcluded)作用域,那么您有责任获得该作用域并同时销毁它。
建议的方法是围绕您希望以这种方式操作的任何DOM元素创建一个新的自己的子作用域,并在删除其内容时销毁这些作用域-然后将自动销毁和清理任何子作用域。
请注意,所有操作DOM的内置指令(ngIf、ngRepeat、ngSwitch等)都遵循了此最佳实践,因此,如果您只使用这些指令来操作DOM,则不必担心此更改。
参考
范围:$broadcast
AngularJS更改日志:1.3.0-rc.4中断更改
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环