[英]AngularJS issue with ng-show and rootScope
我有一个触发实时事件的应用程序。 当其中一个事件发生时,我们使用以下代码更改$ 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
循环。
尝试使用Angulars $ timeout而不是setTimeout。 否则,您将需要$ apply()。
https://coderwall.com/p/udpmtq/angularjs-use-timeout-not-settimeout
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.