栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Angular ngGrid选择页面加载行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Angular 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”事件(由于某种原因第一次出现错误的行)。这是我必须执行的操作,以确保仅针对正确的行触发该事件一次。

这就是我发生的事情:

  • ngGridEventData(没有afterSelectionChange触发器,可能是因为没有呈现的行)
  • ngGridEventData(没有afterSelectionChange触发器,可能是因为没有呈现的行)
  • Ajax调用以检索数据
  • 延迟(可能是渲染)
  • ngGridEventData
  • afterSelectionChange x2
  • ngGridEventData
  • afterSelectionChange x2

所以我不得不用这个:

  • 进行反跳操作以确保在延迟期间仅调用一次该函数(超时很低,因为这两个调用成对存在,并且呈现的行检查确保未使用第一个调用)
  • 检查渲染的行> 0,以确保在延迟和数据加载可能需要一些时间的慢速系统(或慢速连接)上未触发前两个事件
  • (可选)使用rowItem.selected来避免另一个“错误”,因为afterSelectionChange事件即使在选择一行时也会触发两次(对于未选中的行一次,对于选定的行一次)
  • 使用fireOnlyOnce变量避免两次调用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)});    }}));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号