Angularjs 为什么ng show子句中的函数不能在每个摘要周期中持续执行

Angularjs 为什么ng show子句中的函数不能在每个摘要周期中持续执行,angularjs,Angularjs,我正在做测试(忙着解决另一个问题) 我有一个div元素,定义如下: <div ng-show="myFunction()"> //some content </div> 我希望在浏览器控制台中,当运行此代码时,我会不断看到“myFunction called”一词被反复写入,因为我希望函数在每个角度摘要循环中都会被评估。但我看到的是,它被调用了有限的几次,然后就不再被调用了 这是为什么?简单地说,因为可能已经没有消化循环了。摘要周期不是一种永远每50毫秒运行一次的“

我正在做测试(忙着解决另一个问题)

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

<div ng-show="myFunction()">
  //some content
</div>
我希望在浏览器控制台中,当运行此代码时,我会不断看到“myFunction called”一词被反复写入,因为我希望函数在每个角度摘要循环中都会被评估。但我看到的是,它被调用了有限的几次,然后就不再被调用了


这是为什么?

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


要测试这一点,只需添加一个单独的按钮,该按钮带有一个简单的console.logs函数,您将看到,当您按下该按钮时,$scope.myFunction()将被调用。

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

$digest cycle/loop将保持循环,直到不再有模型更改,或者达到最大循环计数10

在您的情况下,没有模型在某一点得到更新


所以摘要循环将执行有限的时间(至少两次),调用的Ofore
“myFunction”
将在有限的时间内被看到,正如@Nicolas所说的,可能不再有摘要循环了。您应该试试这个$rootScope。$watch(function(){})它将每$digest循环调用一次
 $scope.myFunction = function () {
    console.log("myFunction called");
    return true;
 }