我的问题是对该问题的扩展
Getting select rows from ng-grid?
朋克-http://plnkr.co/edit/DiDitL?p=preview
我需要在页面加载时选择一行,并且需要避免听'ngGridEventData'
调用$ scope.gridOptions.selectRow(2,true);由于尚未加载网格,因此 Controller 主体中的“故障”失败。
避免监听ngGridEventData的原因是,我需要 Controller 监听之前和基于此触发的事件,因此我需要选择nggrid行。
有任何想法吗?
最佳答案
对我而言,没有任何答案有效(我使用ng-grid v2.0.14)。
所选答案之所以可行,可能是因为数据不是很大或者不是通过ajax调用加载的,否则您不能在ngGridEventData之前选择行,因为在呈现行时会触发该事件,并且如果尚未渲染。
如果这些条件中的任何一个失败,或者网格花费了比平时更多的时间来渲染,则所选答案将不起作用。
我有一个约有2000行的可滚动网格,但是我对监听ngGridEventData没有任何限制,所以我就这样做了,尽管它对我来说有一种怪异的行为:ngGridEventData对我正好触发了4次,在数据到达之前触发了两次从ajax调用开始,然后两次。
我使用了这个jquery插件http://benalman.com/projects/jquery-throttle-debounce-plugin/(即使没有jQuery也可以使用它)来制作该函数,因此该函数仅被调用一次。
并且由于这还不够,因此“selectRow/selectItem”函数会两次触发“afterSelectionChange”事件(由于某种原因第一次出现错误的行)。这是我必须执行的操作,以确保仅针对正确的行触发该事件一次。
这就是我的情况:
所以我不得不用这个:
这是一个示例代码:
$scope.fireOnlyOnce=true;
$scope.gridOptions = {
//Stuff
afterSelectionChange: function (rowItem) {
if($scope.fireOnlyOnce){
if(rowItem.selected){
//Do stuff
}
} else {
$scope.fireOnlyOnce=true;
}
}
};
$scope.$on('ngGridEventData', jQuery.debounce(100, function (row, event){
var renderedRows = row['targetScope'].renderedRows.length;
if(renderedRows>0){
$scope.fireOnlyOnce=false;
$timeout(function(){$scope.gridOptions.selectRow(2, true)});
}
}));