我有一个数据集,我已从服务中检索并使用ng-repeat
进行显示。我需要根据使用ng-model=<a_name>
设置的一些选择元素来过滤此数据。
这是重复的元素:
<li ng-repeat="item in dota_have_items | orderItemsBy:'pos':false | filter:search | itemFilter:rarity:'rarityProperName'">
在上文中,搜索和稀有就是ng-models
。
以下是json数据的示例:
[
{
"user": "u2122",
"item": {
"defindex": 15059,
"name": "Bloodstone of the Precursor",
"itemClass": "Socket Gem",
"imageUrl": "http://cdn.dota2.com/apps/570/icons/econ/tools/bloodstone2.f4936e5a87dc66b47dbe653101cfc17de34176e6.png",
"itemHero": null,
"itemRarity": {
"rarityProperName": "Mythical",
"rarityColor": "#8847ff"
}
},
"item_classid": "170676805",
"untradable": true,
"item_quality": {
"dotaName": "Standard",
"qualityColor": "#D2D2D2"
},
"custom_name": null,
"custom_desc": null,
"uses": 1,
"in_trade": false,
"pos": 2
}
]
注意:是的,我理解我的命名惯例很糟糕。一旦我开始工作,我就打算解决这个问题。
现在我已经创建了一个自定义过滤器(&#39; itemFilter&#39;):
Search.filter('itemFilter', function(){
return function(items, model, field) {
if(angular.isUndefined(model)==true || model==null || model==''){
return items;
}
console.log((model.charAt(0).toUpperCase() + model.slice(1)));
var filtered = [];
angular.forEach(items, function(item){
console.log(item.field);
if(item[field] == (model.charAt(0).toUpperCase() + model.slice(1)) ){
filtered.push(item);
}
});
return filtered;
}
});
这就是问题所在。我想制作这个过滤器,以便传递我希望模型映射到的项目,ng-model和字段。例如,ng-model=rarity
我通过了&#39; itemRarity&#39;。现在我想要做的是找到该字段,检查模型值是否相同,如果是,则将其添加到已过滤的数组中。看起来很简单,但我不知道如何遍历嵌套对象来查找字段。
有没有办法直接在json对象中找到一个键?
解决方案:取自其他post
不是我正在寻找的100%,因为我不想指定该物业的整个路径,但它能很好地完成工作。