在Angular中,搜索数组中的对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

在Angular中,我有一个返回大量对象的对象。每个人都有一个ID(这是存储在一个平面文件,所以没有数据库,我无法使用ng资源

在我的控制器中:

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

但是当我点击显示更多选项卡时,我想调用函数showdetails(fish.fish_id)。我的功能看起来像这样:

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

如何搜索该fish数组?

提问于
用户回答回答于

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

用户回答回答于

你可以使用现有的$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';
     }
 }

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

扫码关注云+社区