Javascript 在$rootScope事件中使用setTimeout()

Javascript 在$rootScope事件中使用setTimeout(),javascript,Javascript,我正在使用一个名为ng cart的Angular插件将购物车添加到我的网站 ng购物车插件在和项目添加到购物车时广播事件 我希望它显示购物车摘要,然后在每次添加商品时使用setTimeout()函数淡出 $rootScope.$on('ngCart:itemAdded', function (event, data) { if(!$('#cart-summary-container').is(":visible")) {

我正在使用一个名为ng cart的Angular插件将购物车添加到我的网站

ng购物车插件在和项目添加到购物车时广播事件

我希望它显示购物车摘要,然后在每次添加商品时使用setTimeout()函数淡出

    $rootScope.$on('ngCart:itemAdded', function (event, data) {         
        if(!$('#cart-summary-container').is(":visible"))  {         
            $('#cart-summary-container').fadeIn('fast');
            clearTimeout(myVar);
            myVar = setTimeout(function() { $('#cart-summary-container').fadeOut('fast'); }, 2000); 
        }       
    }); 
问题是,如果添加了另一项,则需要取消setTimeout()函数,以便它显示2秒钟

我已尝试在重置超时之前清除超时(myVar)


我相信有一个简单的解决办法,我错过了。感谢您的帮助。

很久以前,我用下面的代码解决了这个问题;)

$rootScope.$on('ngCart:itemAdded', function (event, data) {

    $('#cart-summary-container').fadeIn('fast');

    if($rootScope.yourTimer) {
        $timeout.cancel($rootScope.yourTimer);      
    }

    $rootScope.yourTimer = $timeout(function() { $('#cart-summary-container').fadeOut('fast'); }, 2000);

}); 

安格拉斯?您应该改用超时服务。检查这里如何取消如果之前没有设置myVar,我不确定clearTimeout的行为如何,但是标准说clearTimeout需要第一个参数,所以我会将clearTimeout包装在if语句中。除此之外,我看不出任何问题。您没有指定发生了什么错误,所以可能还有其他问题。好的,我不知道clearTimout()的情况,所以您说在调用setTimout()之前检查myVar是否已初始化。如果我没记错的话,问题是当添加第二个项目时,弹出窗口会比应该的更早消失,因为第一次调用setTimout()。
clearTimeout()
如果参数不是现有的超时标识符,则什么都不做,所以在初始化变量之前调用它是安全的。这基本上可以工作,但是您在哪个范围内声明了
myVar
?感谢Bergi,我确实认为这是变量的范围,并将其更改为$rootScope,同时starcorn建议使用超时服务。它现在正在工作。
//usage  //->this=window
this.setTimeout(function(){//or event [click,]
  this.clearTimeout(this.setTimeout1);
}, 10);

this.setTimeout1 = this.setTimeout(function(){
  console.log(this);
}, 1000);

//usage
//this.clearTimeout(this.setTimeout1);