Reputation: 79
I'd like to figure out why this ng-repeat statement runs infinite. Item.members has a length of 2 and contains userIds = true
<script type="text/ng-template" id="items_renderer.html">
<label>
<span class="team-description" ng-show="!item.editing">{{item.name}}</span>
<label ng-repeat="memberId in item.members">
<span>{{ getMember(memberId) }}</span>
</label>
</label>
</script>
<div ui-tree="options" class="teamlist">
<ol ui-tree-nodes ng-model="teams" class="panel-teams">
<li ui-tree-node ui-tree-handle
ng-repeat="item in teams"
ng-include="'items_renderer.html'">
</li>
</ol>
</div>
$scope.getMember = (memberId) ->
memberobj = fbutil.syncObject('users/' + memberId)
memberobj.$loaded().then (ref) ->
$scope.teamUser.push ref.name
console.log $scope.teamUser
return $scope.teamUser
It will just keep running indefinite.
["Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Sven Woldt", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Yahoo", "Sven Woldt", "Yahoo", "Sven Woldt", "Yahoo", "Sven Woldt", "Yahoo",…]
So how could I restrict this to only return ["Sven Woldt", "Yahoo"]
Thanks for your help!
Upvotes: 0
Views: 243
Reputation: 598728
Every time Angular renders this <span>{{ getMember(memberId) }}</span>
you end up (re)loading that member from Firebase, which in turn triggers a re-render.
Your flow is like this:
getMember
getMember
starts loading the data from Firebasethen
is executed$scope
, which in turnYour getMember
code should check if it has already loaded this member before. If it did, it shouldn't try to reload it - or at least not push it into the $scope
again.
Upvotes: 1
Reputation: 2535
It is indefinite because you keep pushing to $scope.teamUser
in your $scope.getMember
function. If you simply want to display name, why not try
$scope.getMember = (memberId) ->
memberobj = fbutil.syncObject('users/' + memberId)
memberobj.$loaded().then (ref) ->
return ref.name
Upvotes: 1