My aim is to replace the teacher-id(f_teacher) of one outputted array with the teacher name of another array. I wrote a custom filter, that should do the job:
angular.module('core') .filter('replaceId', function () { //filter, which replaces Id's of one array, with corresponding content of another array return function (t_D, s_D, t_prop, s_prop) { //data of target, data of source, target property, source property var replacment = {}; var output = []; angular.forEach(s_D, function (item) { replacment[item.id] = item[s_prop]; //replacment - object is filled with 'id' as key and corresponding value }); angular.forEach(t_D, function (item) { item[t_prop] = replacment[item[t_prop]]; //ids of target data are replaced with matching value output.push(item); }); return output; } }); I use a 'ng-repeat' like this:
<tr ng-repeat="class in $ctrl.classes | filter:$ctrl.search | replaceId:$ctrl.teachers:'f_teacher':'prename' | orderBy:sortType:sortReverse"> <td>{{class.level}}</td> <td>{{class.classNR}}</td> <td>{{class.f_teacher}}</td> </tr> But it only outputs an empty column. Now the strange thing: If I follow the steps with the debugger, it works for the first time the filter is performed. But when it is performed a second time it outputs an empty column.
I noticed that the returned object of the filter overwrites the $ctrl.classes - array, but normally this shouldn't be the case?
Here is a plnkr: https://plnkr.co/edit/EiW59gbcLI5XmHCS6dIs?p=preview
Why is this happening?
Thank you for your time :)
$ctrl.classes. If you don't want it to change$ctrl.classesthen you could do something likeangular.copy()the objects in it.