我的服务中有一个函数需要花很长时间才能计算出来,因此我想在示波器上显示一条消息以表明它正在计算。
我在这里创建了一个(简化的)jsfiddle:http://jsfiddle.net/rikboeykens/brwfw3g9/
var app = angular.module('myApp', []);
app.service('testService', function(){
this.longFunction=function(){
for (var i=0; i<1000000000;i++){
}
}
});
function TestCtrl($scope, testService)
{
$scope.$apply(function(){$scope.waiting="not waiting";});
$scope.longFunction = function(){
$scope.waiting="waiting";
testService.longFunction();
$scope.waiting="not waiting";
}
}
testService上的longFunction大约需要两秒钟才能完成,但是$ scope.waiting不会在此过程中更新为“ waiting”。
我尝试使用$ scope。$ apply,但随后出现一个错误,提示$ apply已经在进行中。
如果我在testService上异步执行longFunction,它将起作用吗?我一直在研究使用诺言,但是我不确定如何去实现它们。
最佳答案
您可以使用$timeout
。
function TestCtrl($scope, testService, $timeout)
{
$scope.waiting="not waiting";
$scope.longFunction = function(){
$scope.waiting="waiting";
$timeout(function(){
testService.longFunction();
$scope.waiting="not waiting";
})
}
}