Javascript 角度测量中的Promise方法
我试图为我的帖子创建一个延迟加载解决方案,请参见以下内容:Javascript 角度测量中的Promise方法,javascript,angularjs,Javascript,Angularjs,我试图为我的帖子创建一个延迟加载解决方案,请参见以下内容: $scope.loadMore = function() { if(hasRunBefore===0){ page+=1; } if($scope.postsCount > $scope.posts.length){ $http.get('/api/posts', {params: { page: page, pageSize: 10 }}) .then(function(res
$scope.loadMore = function() {
if(hasRunBefore===0){
page+=1;
}
if($scope.postsCount > $scope.posts.length){
$http.get('/api/posts', {params: { page: page, pageSize: 10 }})
.then(function(res){
var morePosts = res.data.posts;
if(morePosts && morePosts.length > 0){
loadData(morePosts);
page+=1;
hasRunBefore+=1;
}
});
}
};
};
var loadData = function(posts){
$scope.posts = $scope.posts.concat(posts);
};
一些注意事项:
$scope.postsunt是通过在Mongo中获取整个表的长度来获取的,在本例中,假设这是50
$scope.loadMore在任何人感兴趣的情况下,只要您到达前端无限滚动页面的末尾,就会被调用
$scope.loadMore可以多次调用,因为在到达页面末尾时会触发它
问题是-loadData是附加到$scope.posts的函数,因此if$scope.postscont>$scope.posts.length始终为true
问题-我不熟悉Angular 1.6.x中的promise方法,即:。然后。我需要如何重新构造它,以便等待loadData完成执行,以便if$scope.postscont>$scope.posts.length可以准确地显示 创建加载属性并在请求期间将其设置为true。如果再次调用load more函数,请检查loading属性
$scope.loading = false
$scope.loadMore = function() {
if($scope.loading) return // if page still loading dont allow
$scope.loading = true
if(hasRunBefore===0){
page+=1;
}
if($scope.postsCount > $scope.posts.length){
$http.get('/api/posts', {params: { page: page, pageSize: 10 }})
.then(function(res){
$scope.loading = false; // set loading as false after finish request
});
}
};
};
我没有通读你所有的帖子,但我可以看到你缺少一个回调函数,在这里可以计算$scope.posts.length。答案很棒。简单而美丽。谢谢你,伙计。想把我的头撞到墙上,因为我没弄明白: