如何在angularjs中通知$interval end

如何在angularjs中通知$interval end,angularjs,timeout,intervals,Angularjs,Timeout,Intervals,我想在我的web应用程序中制作自定义动画,我正在使用$interval方法来制作一些视觉效果。 我只想知道,动画什么时候结束 比如说 var myInterval = $interval(function(){ //do some staff }, 10, 20); 我怎样才能得到关于间隔结束的通知?当然,除了$timeout(fn,200)之外 第二个问题也是关于通知的,但是万一我用$interval.cancel(myInterval)手动取消间隔,我能得到通知吗 取消间隔时,您可

我想在我的web应用程序中制作自定义动画,我正在使用$interval方法来制作一些视觉效果。 我只想知道,动画什么时候结束

比如说

var myInterval = $interval(function(){
    //do some staff
}, 10, 20);
我怎样才能得到关于间隔结束的通知?当然,除了$timeout(fn,200)之外


第二个问题也是关于通知的,但是万一我用$interval.cancel(myInterval)手动取消间隔,我能得到通知吗

取消间隔时,您可以自己广播事件。看一看

取消间隔的位置:

$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);

请参阅:

取消间隔时,您可以自己广播事件。看一看

取消间隔的位置:

$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);

请参阅:

对于第一种情况,您只需执行以下操作:

myInterval.then(function () { console.log("Finished."); } );
当Angular已经在为您计算迭代次数时,计算迭代次数不是一个好主意


请参见$q

了解第一种情况,您只需执行以下操作:

myInterval.then(function () { console.log("Finished."); } );
当Angular已经在为您计算迭代次数时,计算迭代次数不是一个好主意


参见$q

hm…看起来不错,但仅适用于第二种情况。第一种情况如何,当我手动设置迭代次数时?嗯…看起来不错,但只适用于第二种情况。第一种情况如何,当我手动设置迭代次数时?