【问题标题】:AngularJS issue with ng-show and rootScopeng-show 和 rootScope 的 AngularJS 问题
【发布时间】:2026-02-11 05:55:01
【问题描述】:

我有一个触发实时事件的应用。当其中一个事件发生时,我们使用以下代码更改 $rootScope 内的模型:

setTimeout(function(){$rootScope.controlsVisible = true}, 1500);

当用户已经在选项卡中并使用应用程序时,此方法有效。但是,当用户使用另一个应用程序甚至在另一个选项卡中时,此代码将更新模型(我尝试添加一些 console.logs),但它不会显示 div(它不会删除 ng-隐藏类)。

它工作的唯一方法是单击应用程序的任何位置。我做了一些研究,发现当标签没有聚焦时,问题出在 setTimeout 上。 然而,正如我之前所说,console.log 正在运行并且模型正在更新。所以这是一种奇怪的行为,我无法弄清楚。

【问题讨论】:

  • 尝试使用 Angulars $timeout。

标签: javascript angularjs real-time settimeout


【解决方案1】:

您似乎缺少$rootScopt.$apply 或没有使用$timeout 而不是setTimeout

解决方案 1:

setTimeout(function(){  
  $rootScope.$apply(function () {
       $rootScope.controlsVisible = true;  
  }
}, 1500);

解决方案 2

如果可以注入$timeout,那么:

$timeout(function() { $rootScope.controlsVisible = true; }, 1500);

当标签具有焦点时它工作的原因可能是其他可能触发$digest 循环的东西。

【讨论】:

    【解决方案2】:

    尝试使用 Angulars $timeout 而不是 setTimeout。否则你将需要 $apply()。

    https://coderwall.com/p/udpmtq/angularjs-use-timeout-not-settimeout

    【讨论】: