- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Angular 应用程序中,我使用 ng-infinite-scroll 来允许用户使用此处的插件连续滚动其“新闻提要” - https://sroze.github.io/ngInfiniteScroll/documentation.html
在我的桌面上它运行良好,但是当在 Android 设备上的 Cordova 应用程序中运行它时,无限滚动会占用大量 CPU 资源。我正在尝试使用 THROTTLE_MILLISECONDS 选项仅每 x 秒处理滚动事件(这应该会提高性能并使滚动不那么不稳定)。
我的模块定义如下:
var abcdDirectives = angular.module('abcdDirectives', []);
var abcdServices = angular.module('abcdServices', [ 'ngResource', 'infinite-scroll', 'ngCookies']);
abcdApp.value('THROTTLE_MILLISECONDS', 10000);
我试图使用上面的行按如下方式限制它,但它似乎没有任何区别。
在我的模板 View 中,我有以下代码:
<div
infinite-scroll="tabs[tabIndex].FeedService.loadFeed(false, tabs[tabIndex].FeedService.filters, search.text, search.dateFrom, search.dateTo)"
infinite-scroll-disabled="tabs[tabIndex].FeedService.busy || tabs[tabIndex].FeedService.noMoreResults || !tabs[tabIndex].active || tabs[tabIndex].FeedService.initialLoad"
infinite-scroll-distance="1"
infinite-scroll-immediate-check="false" >
<div ng-repeat="interaction in getTabItems(tabIndex) track by $index">
在 js Controller 中,这是我的 getTabItems 函数
$scope.getTabItems = function (index) {
if (angular.isDefined($scope.tabs[index].FeedService)) {
console.log('getTabItems'); // this is being output to the console log over and over again extremely quickly
return $scope.tabs[index].FeedService.items;
}
}
我可以在控制台日志中看到上面函数中的控制台日志正在一遍又一遍地输出太多了并且我正在尝试限制这个函数的调用,但是我有节流语句用过好像没什么区别?我的代码做错了什么
-- 版本 --
Angular 1.3.0
ng-infinite-scroll 1.2.2
最佳答案
THROTTLE_MILLISECONDS
应该在将使用 ngInfiniteScroll
的模块上设置。因此,对于您的情况,应将其设置为 abcdServices
,像这样。
var abcdDirectives = angular.module('abcdDirectives', []);
var abcdServices = angular.module('abcdServices', [ 'ngResource', 'infinite-scroll', 'ngCookies']);
abcdServices.value('THROTTLE_MILLISECONDS', 10000);
但在我看来,值(value)应该在于它的直接父级(使用 ngInfiniteScroll
)。像这样。
angular.module('yourApp.controllers', [])
.value('THROTTLE_MILLISECONDS', 5000)
.controller('controllerWhichUseInfiniteScroll',
['$scope',
function ($scope) {
}
]);
infinite-scroll
如果您设置 tabs[tabIndex].FeedService.loadFeed
,事件函数( infinite-scroll-disabled
在您的情况下)将在无限循环中运行在渲染 tabs[tabIndex].FeedService.loadFeed
的新结果之前标记为 true完成了。
要解决此问题,请设置 infinite-scroll-disabled
在下一个摘要循环中使用 $timeout
标记为 true 。这意味着只有当渲染结果完成时,flag 才会为 true。见下文...
<div
infinite-scroll="getDataFromApi()"
infinite-scroll-disabled="loaded"
infinite-scroll-distance="1">
<div ng-repeat="data in dataList">
--
angular.module('yourApp.controllers')
.controller('yourController',
['$scope', '$timeout', 'apiDataService',
function ($scope, $timeout, apiDataService) {
$scope.dataList = [];
$scope.getDataFromApi = function () {
$scope.loaded = false;
apiDataService.getData()
.then(function(result) {
$scope.dataList = result.data;
//Set loaded to true after rendering new results is finished.Otherwise it will make infinite api calls.
$timeout(function (){
$scope.loaded = true;
});
});
}
}
]);
还值得指出的是,getTabItems()
出于性能原因,不应用于在 html 中绑定(bind)数据。因为 Angular 会将其放入摘要循环中进行更改检测,并且无论您是否使用 ngInfiniteScroll
都会被多次调用。或不。
关于javascript - 如何在ngInfiniteScroll(AngularJS)中设置 throttle 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002643/
上下文:我正在 javascript tutorial 的任务下编写一个简单的 throttle 。 任务:编写一个像这样工作的 throttle : function f(a) { consol
我有一个带有 React 函数 component 的简单点击事件,我尝试使用 RxJS throttleTime 进行 throttle 。每次单击我都会在 500 毫秒 内 throttle ,但
在 Laravel 6 中,密码代理现在具有以下功能来限制密码重置( https://github.com/laravel/framework/blob/6.x/src/Illuminate/Auth
我有一个事件监听器,我正在尝试用 lodash.throttle 包装它: import throttle from "lodash.throttle" const throttledHandleRe
当我尝试使用 go get 命令安装 throttled 时: go get "github.com/throttled/throttled" 我得到错误: 无法加载包:包 github.com/th
更具体地说,我正在寻找 BlackBerry 6.0 API Animator 类,其构造函数描述为“创建一个以指定帧速率限制 update() 调用的 Animator 对象”。 http://ww
在应用洞察中,在 API->Activity & Errors 下有与“Api Throttling”和“API Throttling Warnings”相关的部分。但是我找不到关于这些部分的含义以及
最近,我们在使用IPP数据服务的应用中,不时遇到这些错误。 ErrorRequest 2012-12-07T10:10:59+00:00 3001 messag
最近,我们在使用IPP数据服务的应用中,不时遇到这些错误。 ErrorRequest 2012-12-07T10:10:59+00:00 3001 messag
我有以下代码: IDisposable subscription = myObservable.Throttle(TimeSpan.FromMilliseconds(50), RxApp.MainTh
我有一个定义 onDragEvent 的 Controller : controller = Em.Object.create( { onDragEvent: function() {
我如何使用 ScheduledThreadPoolExecutor、ScheduledFuture 和 ExecutorCompletionService 的组合来限制接受可变参数?收到来自 Call
我在 trait ThrottlesLogins 中添加了以下方法在 Laravel 5.5 中 protected function TotalRegisterAttemptsLeft($reque
我正在使用 ThrottleRequest 来限制登录尝试。 在 Kendler.php 我有 'throttle' => \Illuminate\Routing\Middleware\Throttl
我可能对此完全疯了,但是YouTube视频的下载/缓冲速率似乎在一开始就更快,并且缓冲点距当前播放的标记越远,缓冲的速度就越慢。 我疯了吗,还是对其他所有人一样? 假设是后者,那么关于它们如何做的任何
我在我的几个页面上设置了无限滚动功能。它工作得很好,但是加载更多项目的 Ajax 调用会进行多次数据库调用,并且每次都必须加载大量图像,并且通常需要几秒钟才能加载。根据我的连接情况,我将其计时在 3
加特林世界的新手,但一位经验丰富的 Loadrunner 用户。我创建了一个示例模拟来运行两个场景,每个场景有 10 个用户,并且希望运行 10 分钟。以下是我的 setup 函数中的内容。但每次我运
我想知道是否有办法执行诸如 System.out.println(); 之类的操作或记录已发生的限制。目前我可以查看是否发生限制的唯一方法是将rejectExecution 设置为True。问题在于,
我正在使用一个 API,它只允许您使用像 request-promise 或 axios 这样的 promise 请求库每秒进行 200 次调用(1000 毫秒)怎么可能你使用 rx.js 去抖/限制
我正在以用户在多线程环境中定义的批量大小写入内存分布式数据库。但是我想限制写入ex的行数。 1000 行/秒。这个要求的原因是我的生产者写得太快而消费者遇到叶内存错误。在批处理记录时是否有任何标准做法
我是一名优秀的程序员,十分优秀!