Javascript &引用;暂停“;及;简历;重复一次

Javascript &引用;暂停“;及;简历;重复一次,javascript,html,angularjs,Javascript,Html,Angularjs,不太清楚如何提问,甚至不知道如何搜索。我有一个实时照片/文本流推送到一个数组,所以我的页面不断有信息进来。因此,我的页面不断以相当快的速度接收新信息。我想知道如何或如何在线搜索,以基本上“暂停”和“恢复”ng重复,同时仍保持信息按到阵列,以便出现计数器和按钮,如“10张新照片”。我意识到这可能是一个复杂的问题,但为了保持“简单”,我只想知道如何暂停和重复 我不确定暂停时间,但您可以使用“限制为10”之类的方法。 可能像下面的代码。U可以将limito绑定到值,而不是对其进行硬编码。 然后,您可以

不太清楚如何提问,甚至不知道如何搜索。我有一个实时照片/文本流推送到一个数组,所以我的页面不断有信息进来。因此,我的页面不断以相当快的速度接收新信息。我想知道如何或如何在线搜索,以基本上“暂停”和“恢复”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);
        }
    }