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

2022-08-30 05:19:04

在Angular中,我在范围内有一个返回大量对象的对象。每个都有一个ID(这存储在一个平面文件中,所以没有数据库,我似乎无法使用ng-resource)

在我的控制器中:

$scope.fish = [
    {category:'freshwater', id:'1', name: 'trout', more:'false'},
    {category:'freshwater', id:'2', name:'bass', more:'false'}
];

在我看来,我有关于鱼的其他信息,默认情况下隐藏了更多,但是当我单击简单的“显示更多”选项卡时,我想调用该函数。我的函数看起来像这样:ng-showshowdetails(fish.fish_id)

$scope.showdetails = function(fish_id) {  
    var fish = $scope.fish.get({id: fish_id});
    fish.more = true;
}

现在,在视图中,将显示更多详细信息。但是,在搜索文档后,我无法弄清楚如何搜索该数组。fish

那么如何查询数组呢?在控制台中,我如何调用调试器,以便我有要玩的对象?$scope


答案 1

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

 $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';
     }
 }

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


答案 2

我知道这是否能帮助你。

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

查看 jsFiddle ;)

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

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

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;
  }
});

在控制器中的用法:

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);
     }
}]);

如果有任何问题,请告诉我。