【问题标题】:Why does function in ng-show clause not keep on getting executed on each digest cycle为什么 ng-show 子句中的函数不会在每个摘要周期中继续执行
【发布时间】:2017-09-29 06:19:34
【问题描述】:

我正在做一个测试(同时忙于解决一个不同的问题)

我有一个 div 元素定义如下:

<div ng-show="myFunction()">
  //some content
</div>

在我的控制器中,我有以下 JavaScript 函数:

 $scope.myFunction = function () {
    console.log("myFunction called");
    return true;
 }

我期待在浏览器控制台中,运行此代码时,我会不断看到“myFunction called”字样被一遍又一遍地写入,因为我希望在每个角度摘要周期上评估该函数。但是我看到的是它被调用了几次,然后就不再被调用了。

这是为什么?

【问题讨论】:

  • 正如@Nicolas 所说,可能不再有摘要周期。你应该试试这个 $rootScope.$watch(function(){ }) 它将在每个 $digest 循环中被调用

标签: angularjs


【解决方案1】:

简单地说,因为可能不再有摘要循环。摘要周期不是某种永远每 50 毫秒运行一次的“间隔计时器”,而是它们对页面更改/事件做出反应。这可以是按钮点击、滚动事件、http 请求等。

要对此进行测试,只需添加一个单独的按钮,该按钮带有一个简单的 console.logs 一些内容的功能,您会看到您的 $scope.myFunction() 将在您按下该按钮时被调用

【讨论】:

    【解决方案2】:

    当$digest 循环运行时,会执行观察者以查看作用域模型是否已更改

    $digest 循环/循环一直循环,直到不再有模型更改,或者达到最大循环计数 10。

    在您的情况下,没有模型在某个时间点得到更新。

    因此摘要循环将执行有限时间(至少两次),因此"myFunction called" 将在有限时间内被看到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2020-07-09
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多