Ng-repeats are constantly evaluated on every digest cycle - which means your function will be called over and over. You are creating a new object on every cycle, which causes angular to keep reevaluating, leading to the problem you've explained (full explanation here). Ideally you should always be calling ng-repeat against static data:
$scope.data = function(dataObj);
And setting your markup as:
<div ng-repeat="item in data"></div>