在这个例子中,我根据文本字段是否是" beast"的值来返回一个字符串。和/或"颜色"。但这只是返回一个字符串。我会在两个有对象的条件下返回:
http://plnkr.co/edit/fSut1gqIKFAEej8UdbmE?p=preview
在第一个条件中我需要创建一个对象并返回:
{name: item.beast, type: "animal"}
在第二个条件中,我需要创建一个对象并且:
{name: item.color, type: "color of animal"}
然后在HTML文件中,我可以放下列表:
{{ item.name }} and {{item.type}}
所以,如果我输入" r"应该出现在列表中:
"rat and animal"
"red and color of animal "
答案 0 :(得分:0)
我不确定你想要得到什么。看看这个插件。这是你想要的吗?
如果您将整个项目推送到结果列表,它会起作用,如:
results.push(item);
答案 1 :(得分:0)
查看this
app.service('myFactoryService', function(){
this.createObj = function(name,type){
var obj = {};
obj.name = name;
obj.type = type;
return obj;
}
});
results.push(myFactoryService.createObj(item.beast,"animal"));
我不知道为什么双向绑定不允许以不同方式显示两个变量,只有对象,但是有定义的服务来创建一个对象,然后根据两个选项在过滤器中创建它。
答案 2 :(得分:0)
你可以返回过滤器内的对象,就像你在问题上写的那样(同样,我已经清理了一下ifs ...不要在过滤器里面使用document.getElementById,你有searchText已作为过滤器的第二个参数!):
app.filter('searchData', function() {
return function(items, searchText) {
var results = [];
if(searchText) {
angular.forEach(items, function(item) {
if(item.beast.indexOf(searchText) === 0) {
results.push({ name: item.beast, type: 'animal' });
}
if(item.color.indexOf(searchText) === 0) {
results.push({ name: item.color, type: 'color of animal' });
}
});
}
return results;
};
});
然后,您可以在html的P对象上使用它:
<p ng-repeat = "item in data | searchData : search">{{item.name + ' and ' + item.type}}</p>
我已使用更改后的代码将plunkr分叉:
<强> http://plnkr.co/edit/EDd578?p=preview 强>
希望它有所帮助,
致以最诚挚的问候,
拉法。
PS。另外,记住总是在Javascript中使用相等运算符!==或===,而不是!=和==表单。