如何获取角度$ interval的状态-检查间隔是否已取消

如何获取角度$ interval的状态-检查间隔是否已取消,第1张

如何获取角度$ interval的状态-检查间隔是否已取消

After

var getOverviewMapTimer = $interval(...);

getOverviewMapTimer
持有对一个对象的引用(恰好是一个承诺)。

这样做

$interval.cancel(getOverviewMapTimer)
会传递(并取消)
getOverviewMapTimer
变量引用的对象,但是无法将对象转换为null。该
getOverviewMapTimer
变量将继续持有该承诺的对象,并把它设置为null的唯一途径一提的是,通过一个新的任务(即明确地将其设置为空):

var getOverviewMapTimer = $interval(...);...$interval.cancel(getOverviewMapTimer);getOverviewMapTimer = null;

高级主题:

拥有一种简单的方法来确定间隔承诺是否已取消确实听起来不错,例如,向

cancelled
promise对象添加自定义属性,并在取消间隔时将其值设置为true。
Angular非常酷,具有令人难以置信的灵活性和可扩展性,因此使用 Service
Decorator

的概念,我们可以“增强”
$interval
服务,扩展其
cancel()
方法以添加
cancelled
属性,并
true
在取消间隔承诺时将其值设置为:

app.config(function ($provide) {        $provide.decorator('$interval', function ($delegate) {                var originalCancel = $delegate.cancel;                $delegate.cancel = function (intervalPromise) {  var retValue = originalCancel(intervalPromise);  if (retValue && intervalPromise) {     intervalPromise.cancelled = true; }  return retValue;        };                return $delegate;    });});

现在,我们可以

$interval
像往常一样使用该服务,并且我们始终可以检查间隔承诺的
cancelled
属性以了解其是否已取消。

var getOverviewMapTimer = $interval(...);...console.log(!!getOverviewMapTimer.cancelled);   // false$interval.cancel(getOverviewMapTimer);console.log(!!getOverviewMapTimer.cancelled);   // true

另请参 见此简短演示



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5001616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存