我正面临着奇怪的内存泄漏。
我正在使用uigrid appScopeProvider能够在网格中选择一行并调用表达式绑定(“&”)来验证我的选择并关闭我的组件。
我今天早上通过使用Chrome内存工具发现,该组件的父级从未发布,该组件也从未发布。 使用该工具,我发现原因是uigrid。
我试图取消在appScopeProvider内部使用此表达式绑定,并且我的内存泄漏消失了。
这就是为什么我确信问题在这里。
这是示例代码
angular.module('myApp')
.component('myComp', {
templateUrl: '....',
controller: [MyCompCtrl],
bindings: {
onValidate: '&'
}
}
function MyCompCtrl() {
var ctrl = this
ctrl.myData = []
ctrl.gridOptions = {
data: '$ctrl.myData',
appScopeProvider: {
onClick: function(row) {
ctrl.onValidate({ $row: row.entity })
}
},
rowTemplate: '<div ng-click="grid.appScope.onClick(row)" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name\" class="ui-grid-cell" ui-grid-cell ></div>',
columnDefs: [...]
}
}
单击我的行时,将调用onValidate绑定,组件的父级接收数据,并且该组件被删除。 我在此组件上也有一个按钮,它使我无需触摸网格即可验证当前行。 如果我使用按钮进行验证,则不会有任何内存泄漏。
当在网格appScope上调用onClick时,问题似乎很明显。
我尝试了很多事情:
没有任何效果,我没有主意。我已经在google和stackoverflow中搜索了类似内容,但未找到任何内容
我想我必须在$ scope $ destroy事件上做一些特定的事情来清理我的uigrid,以允许它释放我的组件,但是怎么办?
有人已经面临过类似的事情吗?