angularjs - ui-scroll:滚动时禁用更新/获取
问题描述
我正在尝试使用ui-scroll在大型数据集中提供动态滚动。
该get
方法调用查询数据库的后端函数。查询“慢”,所以我想在滚动拇指移动时禁用查询。
例如,假设视口显示 10 行,数据库中有 100,000 行,我们一次获取 100 行。
如果您快速将拇指从顶部拖到底部,则ui-scroll
当前会发出大量数据请求。我想跳过所有中间请求,只在拇指停止移动时获取数据。
我isLoading
在适配器上摆弄过,但找不到使这项工作的方法。
建议?角 1.4.1。
$scope.datasource = { };
$scope.datasource.get = fetchData
$scope.datasource.minIndex = 0;
$scope.datasource.maxIndex = 10553;
$scope.scrollAdaptor = {};
var loadCount = 0;
function fetchData(desc, successCb)
{
var start = desc.index;
var end = desc.index + desc.count - 1;
var url = "scrollTest.php?start=" + start + "&end=" + end;
$http.get(url)
.then(function(goodResp)
{
console.log("got data, loadCount", loadCount);
successCb(goodResp.data);
},
function(badResp)
{
});
};
解决方案
GitHub上有与该问题相关的讨论。简而言之,angular-ui-scroll 不能直接跳过中间请求,但以下解决方法可能会有所帮助。
在开始时设置最小/最大索引以使视口与 100,000 行相关
$scope.datasource.minIndex = 1 $scope.datasource.maxIndex = 10000
绑定额外的滚动事件以拦截用户在视口上滚动
检查两个事件之间的滚动位置增量,如果它大于某个固定值(例如 500 像素),则重建视口
重建意味着
adapter.reload(indexToReload)
方法调用和设置最小/最大索引最后一件事是
indexToReload
,它应该由当前滚动位置和项目高度来计算:indexToReload = Math.floor(scrollTop/itemHeight)
推荐阅读
- java - Spring安全登录总是200
- tsql - SSRS Query 获取标量变量错误,而不是在 Visual Studio 中使用参数
- javascript - 输入类型密码不可移动
- node.js - 在 Express 中间件中处理 PromisesRejections
- c# - 来自身份注册格式的 JSON 响应
- ruby-on-rails - 带有 has_many: :through 的 Rails 计数器缓存
- git - 一个文件需要在 git global repo 中,它应该被 git 忽略
- json - 如何在 Go 中将字符串转换为 JSON?
- sql - Order by 如何不与 part by 一起使用?
- r - 使用正则表达式删除与国民保险号码格式不匹配的行