Я хочу отфильтровать значения <select>
.
У меня есть таблица с первым столбцом <select>
.
Например: объект для <select>
JSON:
json1 = [{id: 1, name: 'ABC'}, {id: 2, name: 'DEF'}, {id: 3, name: 'XYZ'}, {id: 4, name: 'ASD'}, {id: 5, name: 'QWE'}]
json2 = [{id: 1, name: 'ABC'}, {id: 2, name: 'DEF'}]
Мое требование: нам нужно показать значения из json1 в параметрах ng, но какой объект не должен присутствовать в json2.
Например: первые 2 строки будут заполнены json2. Поэтому нам нужно указать опции 'XYZ', 'ASD' и 'QWE' в следующих строках.
Предположим, если в раскрывающемся списке третьей строки выбрано имя ' XYZ '. затем 4-й ряд <select>
должен показывать только 'ASD', and 'QWE'
. Точно так же любой объект, выбранный в других строках, не должен отображаться в раскрывающемся списке других строк.
Я пробовал что-то вроде этого
<select ng-model="obj"
ng-options="obj.id as obj.name for obj in json1 | myFilter:json2">
</select>
myApp.filter('myFilter', function(json2) {
return function(json1) {
var filtered = [];
json1.forEach((d) => {
var exists = false;
json2.forEach((ad) => {
if(ad.id == d.id) {
exists = true;
}
});
if(!exists) filtered.push(d);
});
console.log(filetered);
return filtered.length > 0 ? filtered : json1;
};
});
В фильтре console.log () значения фильтруются правильно, как и ожидалось. Однако в параметрах ng все параметры из json1 по-прежнему доступны без обновления отфильтрованных значений.
Что не так?