我有一个可以触发实时事件的应用。当其中一个事件发生时,我们使用以下代码更改$ rootScope中的模型:
setTimeout(function(){$rootScope.controlsVisible = true}, 1500);
当用户已在选项卡中并使用该应用程序时,此功能正常。但是,当用户使用其他应用程序或甚至在另一个选项卡中时,此代码将更新模型(我尝试添加一些console.logs),但它不会显示div(它不会删除< em> ng-hide 类。)
它的唯一工作方式是点击应用的任何地方。我做了一些研究,发现当标签没有集中时,问题出现在setTimeout上。 但是正如我之前所说的,console.log正在运行并且模型正在更新。所以这是一种奇怪的行为,我无法弄明白。
答案 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