Angularjs 使$timeout函数正常工作时出现的问题

Angularjs 使$timeout函数正常工作时出现的问题,angularjs,Angularjs,我用我的代码创建了一个plunkr。单击“切换折叠”按钮折叠下拉列表后,我需要下拉列表在3秒钟后自行关闭。我在example.js的HeaderCtrl中玩过以下内容,但运气不好: function callAtTimeout(){ $scope.isFooCollapsed = true; } $timeout(function(){ !$scope.callAtTimeout(); }, 3000); 如有任何帮助/意见,将不胜感激。提前谢谢 您只需使用angular$tim

我用我的代码创建了一个plunkr。单击“切换折叠”按钮折叠下拉列表后,我需要下拉列表在3秒钟后自行关闭。我在example.js的HeaderCtrl中玩过以下内容,但运气不好:

function callAtTimeout(){
  $scope.isFooCollapsed = true;
}

$timeout(function(){ 
  !$scope.callAtTimeout();
}, 3000);


如有任何帮助/意见,将不胜感激。提前谢谢

您只需使用angular
$timeout
即可实现所需的功能,如下所示:

var timer;
$scope.isFooCollapsed = true;
$rootScope.$on("bagNotification", function() {
  $timeout.cancel(timer);
  $scope.isFooCollapsed = !$scope.isFooCollapsed;
  timer = $timeout(function() {
    $scope.isFooCollapsed = true;
  }, 3000);
});
我们每次都使用
$timeout取消超时。取消
可防止多次单击按钮时出现多次隐藏/显示


Plunkr:

您是否将
$timeout
注入控制器的依赖项列表?我在Plunkr?Hi TJ中没有看到任何超时代码。根据您的要求,我已使用更新的plunkr编辑了问题。谢谢你的帮助。有人能告诉我为什么我的问题被否决了吗?谢谢。非常感谢你,thepio!在我的情况下,不需要取消计时器。因为即使有人多次单击切换按钮,对于我的用例,我实际上也希望下拉列表显示同样多的次数。以下来自您原始答案的普通代码适用于我。再次感谢。对于任何阅读本文的人来说,这就是我所说的代码。$scope.isfooclapsed=true$rootScope.$on(“bagNotification”,函数(){$scope.isfooclamped=!$scope.isfooclamped;$timeout(函数(){$scope.isfooclamped=!$scope.isfooclamped;},3000);});没问题。很高兴听到你得到了你想要的,我可以帮你:)