Javascript &引用;暂停“;及;简历;重复一次
不太清楚如何提问,甚至不知道如何搜索。我有一个实时照片/文本流推送到一个数组,所以我的页面不断有信息进来。因此,我的页面不断以相当快的速度接收新信息。我想知道如何或如何在线搜索,以基本上“暂停”和“恢复”ng重复,同时仍保持信息按到阵列,以便出现计数器和按钮,如“10张新照片”。我意识到这可能是一个复杂的问题,但为了保持“简单”,我只想知道如何暂停和重复 我不确定暂停时间,但您可以使用“限制为10”之类的方法。 可能像下面的代码。U可以将limito绑定到值,而不是对其进行硬编码。 然后,您可以在需要时更新代码中的值Javascript &引用;暂停“;及;简历;重复一次,javascript,html,angularjs,Javascript,Html,Angularjs,不太清楚如何提问,甚至不知道如何搜索。我有一个实时照片/文本流推送到一个数组,所以我的页面不断有信息进来。因此,我的页面不断以相当快的速度接收新信息。我想知道如何或如何在线搜索,以基本上“暂停”和“恢复”ng重复,同时仍保持信息按到阵列,以便出现计数器和按钮,如“10张新照片”。我意识到这可能是一个复杂的问题,但为了保持“简单”,我只想知道如何暂停和重复 我不确定暂停时间,但您可以使用“限制为10”之类的方法。 可能像下面的代码。U可以将limito绑定到值,而不是对其进行硬编码。 然后,您可以
<div ng-repeat="item in items|limitTo:10">{{item}}</div>
{{item}
如果您想要“简单”的答案,您可能需要稍微修改代码或功能
Angular使用一个摘要循环,检查作用域中的任何变量自上次运行以来是否发生了更改。这允许它运行脏检查并更新它在视图和模型/控制器之间绑定的变量
然后你们会问,“我如何暂停Angular的摘要循环,并在我知道足够多的事情发生变化后再次启动它?”。您必须在常规循环之外更新范围变量,然后在实际需要检查时调用$apply
在我的头顶上,我处理它的方式是有一个第二个数组,它将馈送到连接到ng repeat的数组中。您有一个变量,我们称之为$scope.show,它在单击“暂停”时设置为false,在单击“恢复”时设置为true。如果$scope.show为true,则提要将推送到辅助数组,然后推送到ng repeat数组。此外,将$scope.show切换为true时,立即将提要数组中的所有内容推送到不存在的ng repeat数组中。您还可以将变量(如$scope.diff)作为次要数组和ng repeat数组长度之差的基础。这将是“新”照片的数量。您可以将阵列分成两部分
$scope.items = []; //the visible model would be here
$scope.queue = []; //the pending-to-show elements are here
我们将假设,当一张新照片出现时,它会被推送到调用以下函数的位置(我不知道您实际拥有的事件处理程序是什么,所以请记住以下代码):
使用此代码,您可以执行以下操作:
onReceiveItem
将推送到队列中,而不是实际的可显示数组中loadmore
是您对“10个以上项目”的称呼。将从队列的开头获取10个元素,并通过push将它们附加到实际数组中暂停
功能执行此操作,您可以:
$scope.onReceiveItem = function(item)
{
if ($scope.pause) {
$scope.queue.push(item);
} else {
if ($scope.queue.length) {
//resuming queued items when unpaused and new items arrive
Array.prototype.push.apply($scope.items, $scope.queue.splice(0, $scope.queue.length));
}
$scope.items.push(item);
}
}
另一个函数也是一样的
免责声明:我不知道你是如何获得数据的,所以我只给了你函数。它们位于$scope
中,但根据您的情况,可能不需要它
一般良好实践:几乎可以100%安全地假设项
数组在更改时将向视图反映其值,就好像$digest/$apply过程是纯魔术一样。在最常见的情况下,最好不要依赖于此类内部构件。如果你想要“活数据”和“死数据”,你应该有两种不同的数据结构;问问自己“哪些数据是活动的,哪些数据不是?”您将有两个数据集$scope.queue
根本不需要在$scope
中-我把它放在那里是为了清楚-只是在同一个词法范围中成为一个可访问的标识符(注意,我在这里没有使用$,因为我在谈论编程概念),比如var queue=[]代码>在同一控制器中
$scope.onReceiveItem = function(item)
{
if ($scope.pause) {
$scope.queue.push(item);
} else {
if ($scope.queue.length) {
//resuming queued items when unpaused and new items arrive
Array.prototype.push.apply($scope.items, $scope.queue.splice(0, $scope.queue.length));
}
$scope.items.push(item);
}
}