返回并调用列表中的对象(ANGULAR.js)

时间:2015-12-30 14:49:53

标签: javascript angularjs

在这个例子中,我根据文本字段是否是" 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 "

3 个答案:

答案 0 :(得分:0)

我不确定你想要得到什么。看看这个插件。这是你想要的吗?

如果您将整个项目推送到结果列表,它会起作用,如:

results.push(item);

http://plnkr.co/edit/xW9hqC1z1rKddRWaP2g6?p=preview

答案 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中使用相等运算符!==或===,而不是!=和==表单。