我有一段像这样的代码
$('#id').on('$destroy', function(){
...
}
})
我希望这个函数被destroy事件扼杀,但是它应该在destroy之前执行,现在它在它之后执行。有谁能建议如何实现这个目标?
答案 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,那么您不必担心此更改
<强>参考强>