I have an angular application that displays the value returned by a controller method through a simple expression binding:
Even though your async function returns the same exact string every time, the $digest cycle is fired in loops because your function also makes an ajax call with $http service.
$http service triggers $rootScope.$apply()
when requests are completed and since $apply
triggers a $digest cycle it makes your view expression to be re-evaluated, which in return causes your async function to be called again, and so on...
app.controller('MainCtrl', function($scope, $http) {
$scope.getValue = function(){
return 'some value';
}
$scope.getValueAsync = function(){
$http.get('myfile.html')
.success(function (data, status, headers, config) {
return 'some async value';
});
return 'file not found';
}
});
{{getValueAsync()}}
Moral of the story: If you use functions in expressions, make sure your functions don't affect something outside of them that would trigger a $digest loop, and make sure your functions always return the same output given the same input.