【发布时间】:2019-09-03 13:11:51
【问题描述】:
我想过滤 <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'}]
我的要求是:我们需要在 ng-options 中显示来自 json1 的值,但在 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-options 中,来自 json1 的所有选项仍然可用,未使用过滤值更新。
怎么了?
【问题讨论】:
-
请注意不要为 angularjs 使用
angular标签。angular指 2+ -
@Pranav,是的,它打印了预期的结果。但下拉菜单仍然显示所有选项而不是过滤选项
-
确保示例确实重现了问题!
console.log有拼写错误。而且过滤器的构造是错误的。
标签: angularjs angularjs-directive angularjs-ng-repeat angularjs-filter