当前位置: 首页 > 面试题库 >

如果$ http.get()没有新数据,则使AngularJS跳过运行摘要循环

徐绪
2023-03-14
问题内容

我目前正在轮询服务器以检查新数据,然后相应地在AngularJS应用中更新模型。他大概就是我在做什么:

setInterval(function () {
    $http.get('data.json').then(function (result) {
        if (result.data.length > 0) {
          // if data, update model here
        } else {
          // nothing has changed, but AngularJS will still start the digest cycle
        }
    });
}, 5000);

这可以正常工作,但是大多数请求都不会导致任何新数据或数据更改,但是$
http服务并不真正知道/关心它,仍然会触发摘要周期。我觉得这是不必要的(因为摘要循环是应用程序中最重的操作之一)。 有什么办法仍然可以使用$
http,但是如果没有任何变化,则以某种方式跳过摘要?

一种解决方案是不使用$ http而是使用jQuery,然后调用$ apply使Angular知道模型已更改:

setInterval(function () {
    $.get('data.json', function (dataList) {
        if (dataList.length > 0) {
            // if data, update model
            $scope.value = dataList[0].value + ' ' + new Date();

            // notify angular manually that the model has changed.
            $rootScope.$apply();
        }
    });
}, 5000);

尽管这似乎可行,但我不确定这是个好主意。如果可能,我仍想使用纯Angular。

有人对以上方法的改进或更优雅的解决方案有任何建议吗?

PS我之所以使用setInterval而不是$ timeout的原因是因为$
timeout还会触发一个摘要循环,在这种情况下这是不必要的,只会添加到“问题”中。


问题答案:

Web套接字似乎是这里最优雅的解决方案。这样,您无需轮询服务器。当数据或任何内容发生更改时,服务器可以告诉您的应用程序。



 类似资料:
  • 我正在Intellij(最新)中使用TestNG运行器运行测试。我不使用自定义的testng.xml文件。 类a:不包含实际测试,只包含和注释方法,用于设置我想在实际测试类中使用的静态变量。 类B:包含一个注释测试方法。 我的问题是:似乎没有。为什么? 谢谢!

  • 问题内容: 在摘要循环中,对变量进行脏检查,即是否有100个范围变量,并且如果我更改一个变量,则它将监视所有变量。 假设我有100个彼此独立的范围模型变量。如果我对一个变量进行了更改,那么我不想检查所有其他99个变量。有什么办法吗?如果是,怎么办? 问题答案: 令人惊讶的是,这通常不是问题,即使具有数千个绑定,浏览器也不会出现问题,除非表达式很复杂。的常见答案 是 。 解决方案: 从开始,这很容易

  • 使用AngularJs,我有一个双循环来显示数据,还有一个按年过滤。 当,对于给定的一年,我没有结果,我想显示消息"没有结果...",但由于双循环,我无法让它工作 这是一个演示http://plnkr.co/edit/OSWSyXk8bnvmj1rFwHJ0?p=preview 我要在何时显示的div 要查看没有结果的示例,请在年度下拉列表中选择“2013-2014” 非常感谢

  • 问题内容: 我有一种情况,在这种情况下,我有嵌套循环,其中子循环是由一个以父作为参数的过滤器函数构造的。我还有另一个过滤器,它只是进行文本比较。这是例子 现在,我的问题是,当应用该函数并将其过滤出特定组中的所有结果时,我想隐藏该组(而不要在没有子元素的情况下保持空白)。 我自己的组中没有资料,所以我的父ng-repeat范围中没有该信息。问题是,是否有一种方法可以访问嵌套的ng- repeat并从

  • 问题内容: 我一直在关注Docker教程,并通过对现有映像进行更改并用三个不同的标签对其进行标记,在本地OSX计算机上构建了测试映像: 但是,这些图像都没有摘要: 我使用Dockerfile创建的其他测试映像也有摘要。 为什么有些图像有摘要,而有些则没有? 它与创建映像的方式(是否为Dockerfile)有关吗? 问题答案: 首先,请记住,摘要可以代表一个,一个图层或它们的组合(我们通常将该组合称

  • 我正在尝试对可能存在属性的对象进行查询。但是我在获取