Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 如何获取角度$interval的状态 – 检查间隔是否已被取消大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是Angular(和JS)的新手,只是有点困惑.

我启动一个计时器:

var getOverviewMapTimer = $interval($scope.updateOverviewMap,updatE_FrequENCY);@H_197_10@ 
 

并且,如果我理解,getOverviewMapTimer是一个“承诺”.

我希望能够检查计时器是否正在运行&如果我曾经如此,那除外
$interval.cancel(getOverviewMapTimer);然后getOverviewMapTimer将为null,我可以检查.

事实似乎并非如此.

我是否必须明确地销毁这个承诺(什么是对取消定时器的承诺?).如果是这样,&然后我必须明确地将其设置为null吗?

我认为@R_910_10675@用cancel(getOverviewMapTimer);,但我不是100%肯定,因为getOverviewMapTimer之后仍然是非null.

谢谢你的帮助

解决方法

var getOverviewMapTimer = $interval(…)之后; getOverviewMapTimer包含对象的引用(恰好是一个promisE).

执行$interval.cancel(getOverviewMapTimer)传递(并取消)getOverviewMapTimer变量引用的对象,但无法将对象转换为null. getOverviewMapTimer变量将继续保持对promise对象的引用,并且将其设置为null的唯一方法是通过新的赋值(即明确地将其设置为null):

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

高级主题

有一种简单的方法可以找出间隔承诺是否已被取消(例如,在取消间隔时将自定义取消的属性添加到promise对象并将其值设置为truE),这听起来确实很好.
Angular非常酷,非常灵活且可扩展,因此使用Service Decorator的概念,我们能够“扩充”$interval服务,扩展其cancel()方法添加取消的属性,并在取消时将其值设置为true.区间承诺:

/* service Decorators can be configured in `config` blocks */
app.config(function ($providE) {

    /* Register a decorator for the `$interval` service */
    $provide.decorator('$interval',function ($delegatE) {

        /* Keep a reference to the original `cancel()` method */
        var originalCancel = $delegate.cancel;

        /* Define a new `cancel()` method */
        $delegate.cancel = function (intervalPromisE) {

            /* First,call the original `cancel()` method */
            var retValue = originalCancel(intervalPromisE);

            /* If the promise has been successfully cancelled,* add a `cancelled` property (with value `true`) */
            if (retValue && intervalPromisE) {
                intervalPromise.cancelled = true;
            }

            /* Return the value returned by the original method */
            return retValue;
        };

        /* Return the original (but "augmented") service */
        return $delegate;
    });
});@H_197_10@ 
 

现在,我们可以像往常一样使用$interval服务,我们总是可以检查interval-promise的取消属性,以确定它是否已被取消.

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

另见,这是short demo.

大佬总结

以上是大佬教程为你收集整理的angularjs – 如何获取角度$interval的状态 – 检查间隔是否已被取消全部内容,希望文章能够帮你解决angularjs – 如何获取角度$interval的状态 – 检查间隔是否已被取消所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。