如何在angularjs中通知$ interval end

时间:2014-07-24 10:00:18

标签: angularjs timeout intervals

我想在我的网络应用程序中制作自定义动画,并且我使用$ interval方法来做一些视觉效果。 我想要的就是知道,当动画结束时。

例如

var myInterval = $interval(function(){
    //do some staff
}, 10, 20);

如何获得有关该间隔结束的通知?当然,$ timeout(fn,200)除外。

第二个问题也是关于通知,但是如果我通过$ interval.cancel(myInterval)手动取消该间隔是其他地方,我可以得到通知吗?

2 个答案:

答案 0 :(得分:3)

对于第一种情况,您可以这样做:

myInterval.then(function () { console.log("Finished."); } );

当Angular已经为你做这件事时,计算迭代次数并不是一个好主意。

请参阅https://docs.angularjs.org/api/ng/service/ $ q

答案 1 :(得分:1)

取消间隔时,您可以自己广播事件。看看$rootScope.$broadcast()

取消间隔的地方:

$rootScope.$broadcast('Custom::Event');

您想要检索广播的位置:

$scope.$on('Custom::Event', function (e) { ... });

编辑:迭代

如果要在最后一次迭代后发送广播,请检查为$ interval提供给该函数的第一个参数。

$interval(function (iteration) {

  // Do some stuff...

  // Broadcast after last iteration
  if (iteration === iterations - 1) {
    $scope.$broadcast('Interval::Finished');
  }
}, delay, iterations);

请参阅:JS Bin