AngularJS 异步函数调用
AngularJS asynchronous function call
如何在 Angular 控制器中异步调用函数?我读过有关承诺的信息,但这不是 http 调用,所以我不能使用它。
有什么办法可以解决这类问题吗?
我想显示 spiner/loader 直到被调用的函数完成它的工作。
//控制器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;
});
您可以使用 $timeout 异步调用函数
$timeout(function(){
/// function logic
}, 0);
同样你甚至可以使用.. $evalAsync
阅读更多关于他们的信息here
使用 $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);
}
}
如何在 Angular 控制器中异步调用函数?我读过有关承诺的信息,但这不是 http 调用,所以我不能使用它。 有什么办法可以解决这类问题吗? 我想显示 spiner/loader 直到被调用的函数完成它的工作。
//控制器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;
});
您可以使用 $timeout 异步调用函数
$timeout(function(){
/// function logic
}, 0);
同样你甚至可以使用.. $evalAsync
阅读更多关于他们的信息here
使用 $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);
}
}