首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Angular中,我需要在数组中搜索对象

在Angular中,我需要在数组中搜索对象
EN

Stack Overflow用户
提问于 2013-03-25 16:29:24
回答 6查看 254.9K关注 0票数 116

在Angular中,我的作用域中有一个对象,它返回很多对象。每个人都有一个ID (它存储在一个平面文件中,所以没有DB,我似乎无法使用ng-resource)

在我的控制器中:

代码语言:javascript
复制
$scope.fish = [
    {category:'freshwater', id:'1', name: 'trout', more:'false'},
    {category:'freshwater', id:'2', name:'bass', more:'false'}
];

在我的视图中,我有关于默认情况下使用ng-show more隐藏的鱼的其他信息,但是当我单击简单的show more选项卡时,我想调用函数showdetails(fish.fish_id)。我的函数看起来像这样:

代码语言:javascript
复制
$scope.showdetails = function(fish_id) {  
    var fish = $scope.fish.get({id: fish_id});
    fish.more = true;
}

现在,视图中显示的详细信息越多。但是,在搜索完文档之后,我想不出如何搜索那个fish数组。

那么如何查询数组呢?在控制台中,如何调用调试器才能使用$scope对象?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-25 17:01:55

我知道如果这能帮到你的话。

这是我试着为你模拟的东西。

查看jsFiddle ;)

http://jsfiddle.net/migontech/gbW8Z/5/

创建了一个过滤器,您也可以在'ng-repeat‘中使用它

代码语言:javascript
复制
app.filter('getById', function() {
  return function(input, id) {
    var i=0, len=input.length;
    for (; i<len; i++) {
      if (+input[i].id == +id) {
        return input[i];
      }
    }
    return null;
  }
});

控制器中的用法:

代码语言:javascript
复制
app.controller('SomeController', ['$scope', '$filter', function($scope, $filter) {
     $scope.fish = [{category:'freshwater', id:'1', name: 'trout', more:'false'},  {category:'freshwater', id:'2', name:'bass', more:'false'}]

     $scope.showdetails = function(fish_id){
         var found = $filter('getById')($scope.fish, fish_id);
         console.log(found);
         $scope.selected = JSON.stringify(found);
     }
}]);

如果有任何问题,请让我知道。

票数 95
EN

Stack Overflow用户

发布于 2013-09-27 14:29:30

您可以使用现有的$filter服务。我更新了http://jsfiddle.net/gbW8Z/12/上面的小提琴

代码语言:javascript
复制
 $scope.showdetails = function(fish_id) {
     var found = $filter('filter')($scope.fish, {id: fish_id}, true);
     if (found.length) {
         $scope.selected = JSON.stringify(found[0]);
     } else {
         $scope.selected = 'Not found';
     }
 }

Angular文档在这里http://docs.angularjs.org/api/ng.filter:filter

票数 211
EN

Stack Overflow用户

发布于 2013-10-04 05:33:22

为了给@migontech的回答和他的地址添加他的评论,你可以“让它更通用”,这里有一个方法。下面将允许您按任何属性进行搜索:

代码语言:javascript
复制
.filter('getByProperty', function() {
    return function(propertyName, propertyValue, collection) {
        var i=0, len=collection.length;
        for (; i<len; i++) {
            if (collection[i][propertyName] == +propertyValue) {
                return collection[i];
            }
        }
        return null;
    }
});

然后,对filter的调用将变为:

代码语言:javascript
复制
var found = $filter('getByProperty')('id', fish_id, $scope.fish);

注意,我删除了一元(+)运算符,以允许基于字符串的匹配...

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15610501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档