Javascript 带有ng show和rootScope的AngularJS问题

Javascript 带有ng show和rootScope的AngularJS问题,javascript,angularjs,real-time,settimeout,Javascript,Angularjs,Real Time,Settimeout,我有一个可以触发实时事件的应用程序。当其中一个事件发生时,我们使用以下代码更改$rootScope内的模型: setTimeout(function(){$rootScope.controlsVisible = true}, 1500); 当用户已在选项卡中并正在使用应用程序时,此操作有效。但是,当用户正在使用另一个应用程序或甚至在另一个选项卡中时,此代码将更新模型(我尝试添加了一些console.logs),但它不会显示div(它不会删除ng hide类) 它工作的唯一方法是我点击应用程序的

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

setTimeout(function(){$rootScope.controlsVisible = true}, 1500);
当用户已在选项卡中并正在使用应用程序时,此操作有效。但是,当用户正在使用另一个应用程序或甚至在另一个选项卡中时,此代码将更新模型(我尝试添加了一些console.logs),但它不会显示div(它不会删除ng hide类)

它工作的唯一方法是我点击应用程序的任何地方。我做了一些研究,发现问题出在setTimeout上,此时选项卡没有聚焦。
但是,正如我前面所说,console.log正在运行,模型正在更新。因此,这是一个奇怪的行为,我无法理解。

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

解决方案1:

setTimeout(function(){  
  $rootScope.$apply(function () {
       $rootScope.controlsVisible = true;  
  }
}, 1500);
解决方案2

如果可以注入
$timeout
,则:

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


当选项卡具有焦点时,它工作的原因可能是触发
$digest
循环的其他原因。

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

解决方案1:

setTimeout(function(){  
  $rootScope.$apply(function () {
       $rootScope.controlsVisible = true;  
  }
}, 1500);
解决方案2

如果可以注入
$timeout
,则:

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


当选项卡具有焦点时,它工作的原因可能是触发
$digest
循环的其他原因。

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


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


尝试使用Angulars$timeout。尝试使用Angulars$timeout。