Angularjs不工作
我从AngularJs网站上得到了上面的代码,唯一的一件事是我添加了一个按钮来删除一个Div,其中我们有控制器,但在删除之后并没有销毁方法,因为我在指令和控制器中添加了警报Angularjs不工作,angularjs,destroy,Angularjs,Destroy,我从AngularJs网站上得到了上面的代码,唯一的一件事是我添加了一个按钮来删除一个Div,其中我们有控制器,但在删除之后并没有销毁方法,因为我在指令和控制器中添加了警报 element.on('$destroy', function() { alert('destroy directive interval'); $interval.cancel(stopTime); }); 及 请建议 谢谢您这样做超出了angular的范围 <button id="btn" onclick="De
element.on('$destroy', function() {
alert('destroy directive interval');
$interval.cancel(stopTime);
});
及
请建议
谢谢您这样做超出了angular的范围
<button id="btn" onclick="DeleteMainDiv()">DeleteDiv</button>
这将触发销毁功能
但我觉得没有必要。当路由更改或不再需要指令时,Angular将自动运行$destroy
事件处理程序
需要注意的主要事情 当执行
element.remove()
时,该元素及其所有子元素将从DOM中删除,所有事件处理程序将通过例如element.on附加
它不会破坏与元素关联的$scope
因此,您需要手动触发作用域。$destroy()
首先获取元素的范围:-
var scope = angular.element(document.getElementById("mainDiv")).scope();
其次,从dom中删除元素:-
$('#mainDiv').remove();
第三,手动销毁范围:-
scope.$destroy();
@mohamedrias不完全是首先我解释了为什么它没有触发销毁事件,因为element.remove()销毁所有事件,包括“on”事件,这就是为什么它没有触发销毁事件。然后我逐行解释了你的答案:-p谢谢:),所以它是一个Bug。当angular知道我们要在其中添加控制器和指令的元素时,它可以添加DOM移除事件。不,这不是一个错误angular不可能(或者可能我不确定)侦听所有DOM移除事件:)你不这样认为吗?Angular应该在场景后面添加watcher,因为Angular知道我们添加控制器或指令的元素是什么。跟踪所有DOM元素会变得非常繁忙。关于angular的$digest循环已经有很多争论,因为它降低了angular的性能。这就是Angular 2.0中使用ES6 observe属性完全重写摘要循环的原因。如果angular必须跟踪所有DOM$destroy事件,那么这将是一个性能上的打击。但是,当路线改变时,它会改变。在您的例子中,您已经手动删除了DOM元素,因此它没有意识到它,因为范围仍然有效。
$('#mainDiv').remove();
scope.$destroy();