This is about $digest, $watch and ng-repeat. You can find a lot of answers by simply googling it or check out link given by Jsplaine.
In short, your getListUsers() function returns a list of Users every time it is called. However, every returned list is a new collection ( array ). To angular, this means it has to update the display of the list on the page. After each update, Angular actually check a few times to see if the list becomes stable or not by calling getListUsers() function again. Every time angular found that the list is different, so it keep updating the list and keep calling the getListUser function.
To solve this problem, you can create a variable holding the user list:
$scope.userList = [];
and also the function to update the list
$scope.reloadListUsers = function(){
User.listUsers().then(function(response){
$scope.userList = response.users;
});
}
Then in the ng-repeat directive
<div ng-repeat="user in userList">{{ user.somedata }}</div>
Where you want to reload the list, simple call the reloadListUsers function .
<button ng-click="reloadListUsers()" > reload </button>
The reason behind is that now the variable userList is used in the binding instead of the function call expression, and it becomes stable once the list is loaded.