如何在Angular控制器内异步调用函数?我读过有关承诺,但这不是一个http电话,所以我不能使用它。 有没有解决这些问题的解决方案? 我想显示一个spiner / loader,直到被调用的函数完成它的工作。
// Controller JS
$scope.myFunctionCallOnClick = function()
{
if($scope.type=='TYPE1')
{
$scope.showSpiner();
//This function has called syncronously, and i can't display my spiner
Utils.doStuff(words,$scope);
$scope.hideSpiner();
}
else
{
Utils.doStuff2(words,$scope);
}
}
// Utils.js - 这是我的助手工厂
angular.module('app').factory('Utils', function() {
var factory = {};
..
..
factory.doStuff = function()
{
var iteration = 10000000;
whilte(iteration > 0)
{
console.log(iteration);
}
}
..
..
return factory;
});
答案 0 :(得分:1)
使用$ timeout服务让浏览器完成一些工作(在这种情况下显示你的微调器),并在$ timeout回调中调用doStuff。
$scope.myFunctionCallOnClick = function () {
if ($scope.type == 'TYPE1') {
$scope.showSpiner();
$timeout(function () {
Utils.doStuff(words, $scope);
$scope.hideSpiner();
});
}
else {
Utils.doStuff2(words, $scope);
}
}
答案 1 :(得分:0)
你可以使用$ timeout来异步调用函数
$timeout(function(){
/// function logic
}, 0);
同样你甚至可以使用.. $evalAsync
详细了解他们here