Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs不工作_Angularjs_Destroy - Fatal编程技术网

Angularjs不工作

Angularjs不工作,angularjs,destroy,Angularjs,Destroy,我从AngularJs网站上得到了上面的代码,唯一的一件事是我添加了一个按钮来删除一个Div,其中我们有控制器,但在删除之后并没有销毁方法,因为我在指令和控制器中添加了警报 element.on('$destroy', function() { alert('destroy directive interval'); $interval.cancel(stopTime); }); 及 请建议 谢谢您这样做超出了angular的范围 <button id="btn" onclick="De

我从AngularJs网站上得到了上面的代码,唯一的一件事是我添加了一个按钮来删除一个Div,其中我们有控制器,但在删除之后并没有销毁方法,因为我在指令和控制器中添加了警报

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();