angularjs - 在 AngularJS 中使用无限滚动
问题描述
我有一个从服务器检索一些数据的 $http 函数。我想在滚动时加载更多数据,但我不确定如何让它工作。
这是 $http 函数:
$scope.getSubData = function(id){
$http({
method: 'GET',
url: '/getSubData',
params: {
subId: id
}
}).then(function successCallback(response){
$scope.sub = response.data.sub;
});
};
和html:
<div ng-repeat="item in sub">
<tr ng-repeat="message in item.messages">
<td>{{message.title}}</td>
<td>{{message.date}}</td>
</tr>
</div>
解决方案
您可以创建一个指令,该指令将getSubData()
在滚动时调用该方法。该指令将div
像这样放置在父级中:
<div when-scrolled="getSubData()">
<div ng-repeat="item in sub">
<tr ng-repeat="message in item.messages">
<td>{{message.title}}</td>
<td>{{message.date}}</td>
</tr>
</div>
</div>
该指令将如下所示:
angular.module('app').directive('whenScrolled', function() {
return function(scope, elm, attr) {
var raw = elm[0];
elm.bind('scroll', function() {
if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
scope.$apply(attr.whenScrolled);
}
});
};
});
现在,getSubData()
每次滚动时都会调用 ,因此您需要更新定义以连接新数据。
$scope.sub = $scope.sub.concat(response.data.sub);
您可以参考此链接了解更多详情: https ://coderwall.com/p/cl7zyg/api-calls-and-infinite-scroll-with-angularjs
推荐阅读
- rest - 具有(太多)链接和/或多项选择要求的 Rest API
- java - 以编程方式增加 Spring Boot 中的线程数
- excel - 使用 IF THEN 语句使用 VBA 创建加号和减号按钮
- android - 自动更新应用程序,无需在 android 中使用 Play 商店
- java - Mapstruct - 空集
- go - 将两个 if 条件合二为一
- javascript - 有没有办法使用纯文本和 javascript 创建注册/登录“数据库”?
- javascript - 如何将字符串(对象)拆分为新项目中的“保存”?
- c# - 如何使 Json.NET 序列化和反序列化也实现 IDictionary 的自定义动态类型的声明属性
? - reactjs - AntDesign TimePicker React 组件未呈现为下拉菜单