我正在开发一个angular.js指令,它只是一个带有网格的JQuery对话框。
指令模板:
<div class="datasetsGrid" ng-grid="gridOptions"></div>
问题
当我单击一个按钮(“View Grid”)并在关闭对话框时销毁该指令时,将编译并打开该指令。
如果我打开,关闭然后重新打开对话框,我会发现以下错误:
TypeError: Cannot read property 'on' of null
at self.assignEvents (https://127.0.0.1/Scripts/Libraries/Angular/ng-grid-2.0.11.js:1003:29)
at Object.fn (https://127.0.0.1/Scripts/Libraries/Angular/ng-grid-2.0.11.js:3260:52)
at Scope.$digest (https://127.0.0.1/Scripts/Libraries/Angular/angular.js:12251:29)
at Scope.$apply (https://127.0.0.1/Scripts/Libraries/Angular/angular.js:12516:24)
at done (https://127.0.0.1/Scripts/Libraries/Angular/angular.js:8204:45)
at completeRequest (https://127.0.0.1/Scripts/Libraries/Angular/angular.js:8412:7)
at XMLHttpRequest.xhr.onreadystatechange (https://127.0.0.1/Scripts/Libraries/Angular/angular.js:8351:11)
与 ng-grid-2.0.11.debug.js 中的以下代码部分有关:
grid.$groupPanel.on('mousedown', self.onGroupMouseDown).on('dragover', self.dragOver).on('drop', self.onGroupDrop);
grid.$topPanel.on('mousedown', '.ngHeaderScroller', self.onHeaderMouseDown).on('dragover', '.ngHeaderScroller', self.dragOver);
grid.$groupPanel.on('$destroy', function() {
if (grid.$groupPanel){
grid.$groupPanel.off('mousedown');
}
grid.$groupPanel = null;
});
if (grid.config.enableColumnReordering) {
grid.$topPanel.on('drop', '.ngHeaderScroller', self.onHeaderDrop);
}
grid.$topPanel.on('$destroy', function() {
if (grid.$topPanel){
grid.$topPanel.off('mousedown');
}
if (grid.config.enableColumnReordering && grid.$topPanel) {
grid.$topPanel.off('drop');
}
grid.$topPanel = null;
});
这可以在 ng-grid-2.0.11.debug.js 文件的第997行找到。
在我看来,在 ng-grid-2.0.11.debug.js第997行中,它尝试将事件添加到空对象grid.$groupPanel
的代码。此对象为null因为当我关闭对话框时我将其销毁,当我重新打开(并重置所有内容)时,它最终显示,但此错误显示在开发人员工具中。
团队小组(我已启用仍然有效)值得一无所知
我知道如何通过编辑 ng-grid-2.0.11.debug.js 文件解决这个问题,但我不想这样做,因为我喜欢保持它 - 到目前为止,我想我一定是做错了。
以前有人遇到过这个问题吗?如果是这样,你是如何解决它的?