Javascript 角度-如何从DOM中删除使用$compile的元素?

Javascript 角度-如何从DOM中删除使用$compile的元素?,javascript,dom,angularjs,Javascript,Dom,Angularjs,我需要的是两个ng视图的功能。因为我不能,我想改变一些东西的内部HTML并编译它。我遇到的问题是,当我再次更改内容时,我可以编译,但angular是自己删除绑定,还是必须手动执行,如果是,如何执行 编辑:解释 我想制作一个模式,我可以更改其内容并将其绑定到不同的范围(因此使用$compile)。但我不想破坏整个模态,只是它的一些内容,然后换成另一个。我的主要疑问是,删除一些编译过的HTML是否会导致内存泄漏 解决 对于这个问题,我创建了一个新的子作用域(使用$new),并在每次更改内容时将其销毁

我需要的是两个ng视图的功能。因为我不能,我想改变一些东西的内部HTML并编译它。我遇到的问题是,当我再次更改内容时,我可以编译,但angular是自己删除绑定,还是必须手动执行,如果是,如何执行

编辑:解释

我想制作一个模式,我可以更改其内容并将其绑定到不同的范围(因此使用$compile)。但我不想破坏整个模态,只是它的一些内容,然后换成另一个。我的主要疑问是,删除一些编译过的HTML是否会导致内存泄漏

解决

对于这个问题,我创建了一个新的子作用域(使用$new),并在每次更改内容时将其销毁。
感谢您所做的一切

要手动删除元素,请执行一个
元素。删除()
。听起来您还想销毁已编译元素的作用域,因此也可以通过执行
scope.$destroy()
$scope.$destroy()取决于您是否在指令中


此问题的解决方案是创建新的子作用域。由于作用域继承,所有具有父作用域的绑定都有效。当我需要更改内容时,我只需销毁子作用域,避免内存泄漏


我还为子作用域创建了和getter和setter方法,以避免与父作用域发生冲突,以防其他内容使用一次性变量

感谢您提供了良好的解决方案。我刚刚发布了一些实现代码

指令('modal',函数($templateCache,$compile){
返回函数(范围、元素、属性){
var currentModalId=attrs.modalId;
var templateHtml=$templateCache.get(attrs.template);
var modalScope,modalElement;
作用域:$on('modal:open',函数(事件,modalId){
if(modalId==null | | currentModalId===modalId){
openModal();
}
});
作用域:$on('modal:close',函数(事件,modalId){
if(modalId==null | | currentModalId===modalId){
closeModal();
}
});
函数openModal(){
//始终使用原始模板以防止ng repeat指令更改以前的布局
modalElement=$(templateHtml);
//每次打开时创建新的继承范围
modalScope=范围$new(假);
//将模板链接到新继承的模态范围
$compile(modalElement)(modalScope);
modalElement.on('hidden.bs.modal',function(){
if(modalScope!=null){
//每次关闭modal时都要破坏modal的范围
modalScope.$destroy();
}
modalElement.remove();
});
模态元素({
秀:没错,
背景:“静态”
});
}
函数closeModal(){
if(modalElement!=null){
modalElement.modal('hide');
}
}
};
});

也许我不理解某个范围,但如果我破坏元素的范围(这必须在控制器级别完成),我会破坏其中的所有内容,不是吗??我只想删除一些元素,以及它们的绑定实际上现在我正在使用的,它们有一个惊人的工具集合,模态组件非常好。是的,我也同意你的看法,如果我没有创建这个新的作用域
modalScope=scope.$new(false)
$compile
元素到
作用域
,我正在为我的
作用域
添加垃圾,每个新模式。是的,如果您不创建新的子作用域,您将对父作用域使用compile模式,并且可能模式控制器将添加垃圾或覆盖作用域的方法