The bind function is called only once for each element, so whenever you add a new card, the ngRepeat directive adds a new <show-card ...> that will call the link function.
If you want a function to be launched every time cards changed, you can add the $ watch function to the scope of the showCards function, for example:
$scope.$watch('cards',function(){ console.log('multi',$scope.cards); },true);
source share