Angular:立即从ngClick函数返回

Angular: immediately return from ngClick function

本文关键字:ngClick 函数 返回 Angular      更新时间:2024-03-23

我的页面上有一个下拉菜单,它实际上只是一个无序的列表,每个菜单项看起来像:

<li ng-click='doCalc(5)'>Five</li>

现在,doCalc调用的函数可能需要一段时间:

function doCalc(num) {
  factorial(num);
}

这意味着当factorial运行时,菜单将保持在屏幕上。我希望doCalc立即返回,而不是等待factorial完成运行。

我知道如何通过无延迟的setTimeout和承诺来实现这一点但是角度方式是什么?搜索"angular promise"会产生大量关于HTTP请求的结果,而我在这里只是做了一个简单的计算。

可以使用$q服务或$timeout服务创建promise。

function doCalc(num) {
    return $q.when(factorial(num));
};

或者

function doCalc(num) {
    return $timeout(function() {return factorial(num)}, 0);
};

有人偏爱其中一种吗?如果我在页面中也有很多异步请求,会被阻止吗?

$q服务和$timeout服务都使用$q队列(以及低于该setTimeout的队列)。请注意,浏览器队列和Angular $q队列都在一个线程上运行。这意味着一旦factorial函数启动,它就会运行到完成。如果您担心factorial服务会导致其他异步操作出现问题,则需要通过多次调用$q.when$timeout(两者最终都调用setTimeout)来分解该函数。