[英]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.