http://plnkr.co/edit/UfQJU661pQR0DMY3c61t?p=preview
我从AngularJs站点获得了上面的代码,只有我添加了一个按钮来删除我们有控制器的Div,但是在删除之后没有调用destroy方法,因为我已经在Directive和Controller中设置了警报。
element.on('$destroy', function() {
alert('destroy directive interval');
$interval.cancel(stopTime);
});
和
$scope.$on('$destroy', function() {
alert('destroy controller interval');
// Make sure that the interval is destroyed too
$scope.stopFight();
});
请建议。
由于
答案 0 :(得分:0)
你是在角度的背景之外做的。
<button id="btn" onclick="DeleteMainDiv()">DeleteDiv</button>
所以在DeleteMainDiv()
函数
function DeleteMainDiv() {
alert('Controller div going to remove');
//debugger;
var scope = angular.element(document.getElementById("mainDiv")).scope();
$('#mainDiv').remove();
scope.$destroy();
}
这将触发销毁功能。
但我认为不需要它。当路由更改或指令不再需要时,Angular将自动运行$destroy
事件处理程序。
<强> DEMO 强>
答案 1 :(得分:0)
需要注意的主要事项
执行element.remove()
时,该元素及其所有子元素将从DOM中删除,所有事件处理程序都将通过例如element.on附加。
它不会破坏与元素关联的$ scope。
所以你需要手动触发范围。$ destroy();
首先得到元素的范围: -
var scope = angular.element(document.getElementById("mainDiv")).scope();
第二个从dom中删除元素: -
$('#mainDiv').remove();
第三次手动销毁范围: -
scope.$destroy();