我不喜欢this question的答案。在我看来,它的代码味道很糟糕。
我是Angular的新手,所以如果我创建了一个Plunk来帮助那个提问者,我想我可以学到一些东西。
我的Plunk是http://plnkr.co/edit/fJcew7cGCPzJ0nhIQXjg?p=preview,但有两件事我不明白。
请注意,我以两种方式分配了ng-grid的数据 - 一次击落并逐行。评论一个&取消注释另一个玩弄它。
请务必按F12查看开发人员的控制台日志消息。
1)为什么我会收到两个ngGridEventData事件?
2)为什么,当我逐行推送()时,每次push()都没有得到一个ngGridEventData事件? 我正在尝试使用3个网格(与当前问题无关)实现主/详细/更详细,并且已经谷歌搜索了几天。很多人似乎相信他们会得到多个ngGridEventData事件,并想知道如何检测网格是否完全渲染(因此检查我的Plunk)。
简而言之,任何人都可以详细解释ngGridEventData的工作原理吗?谢谢;你的答案会帮助很多人。
答案 0 :(得分:1)
在最近的一篇答案here中,我展示了一些关于这种奇怪行为的知识。似乎这个例程被称为2次,原因是我无法理解(缓存可能?)。
如果您只是在数据对象是克隆时做出反应,那么您可以使用它:
if (data.selected === true) {
if (data.isClone) {
numSelectionChanges = numSelectionChanges + 1;
console.log("afterSelectionChange", 'Selection has chanegd ' + numSelectionChanges + ' times');
console.table(data);
}
}
尝试一下,如果你发现为什么会这样,请告诉我。
更多调查结果更新:
看看这个Plunker
我已将ng-grid.js脚本直接包含在plunker中。 如果你看行3344-3349,你会发现这段代码:
$scope.$on('$destroy', $scope.$parent.$watch(options.data, dataWatcher));
$scope.$on('$destroy', $scope.$parent.$watch(options.data + '.length', function() {
dataWatcher($scope.$eval(options.data));
$scope.adjustScrollTop(grid.$viewport.scrollTop(), true);
}));
正如你所看到的,有两个观察者应用,看起来像是对我的改变的遗留物。 (虽然我不确定,我傻了,那些家伙很聪明)。但是,如果我评论第一行,一切似乎都按预期工作。
尝试此操作时要小心,因为它可能会破坏其他功能。我对这么长的源代码中的黑客行为不太满意。如果某个实际的ng-grid团队成员看到这个,他可以告诉我是否发现了一个错误以及如何报告错误。 (之前从未这样做过!)