我的应用程序中存在内存泄漏,原因是元素范围未被破坏。
对于以下字段:
vm.fields.data.directions = [
{
type: 'required-textarea',
key: 'step',
templateOptions:{
label: 'Directions',
placeholder: 'Wrap a bacon piece around each spear; secure ends with a toothpick.'
},
expressionProperties: {
'link' : function($viewValue, $modelValue, scope){
scope.$on('$destroy', function () {
$timeout(function() {
console.log(scope);
}, 100);
});
}
}
这可以让多个观察者完全保持一个范围。对于我的应用程序,我有多个选项卡用于不同的表单字段输入,其中一些包含大约20个上述引用的字段。每次浏览选项卡并再次单击时,应用程序观察者数量将继续增长,因为范围永远不会被销毁。
为什么在销毁被破坏之后这个范围会存在?
答案 0 :(得分:0)
您的测试逻辑存在问题:在'$ destroy'事件,范围尚未销毁,因此它将始终显示在您的控制台日志中。
来自docs:
在范围被销毁之前,广播一个$ destroy事件 这个范围。应用程序代码可以注册$ destroy事件处理程序 这将使它有机会进行任何必要的清理。
您的控制台日志代码正在触发这一事实表明该范围实际上正在被销毁。