使用ng-show和rootScope

时间:2016-04-25 19:10:20

标签: javascript angularjs real-time settimeout

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

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

当用户已在选项卡中并使用该应用程序时,此功能正常。但是,当用户使用其他应用程序或甚至在另一个选项卡中时,此代码将更新模型(我尝试添加一些console.logs),但它不会显示div(它不会删除< em> ng-hide 类。)

它的唯一工作方式是点击应用的任何地方。我做了一些研究,发现当标签没有集中时,问题出现在setTimeout上。 但是正如我之前所说的,console.log正在运行并且模型正在更新。所以这是一种奇怪的行为,我无法弄明白。

2 个答案:

答案 0 :(得分:2)

您似乎错过$rootScopt.$apply或不使用$timeout而不是setTimeout

解决方案1:

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

解决方案2

如果你可以注射$timeout,那么:

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

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

答案 1 :(得分:1)

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

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