angularjs按数组过滤返回所有匹配的结果

时间:2014-12-05 17:23:38

标签: arrays angularjs filter

我正在接收来自$stateParams的数组,我希望用它来过滤另一个数组的内容。该数组包含一组练习的IDs。我希望显示从$ stateParams中恢复的练习IDs

console.log给了我一个很好的[1,2,3] ID数组但是我需要过滤并显示与数组中的ID匹配的所有结果。

这是当前用于测试的控制器中保存的数据。

 $scope.exerciseIds = $stateParams.exerciseIds;

 $scope.singleProgrammes = [
 {exerciseId: 1, exerciseName: 'Deadlift', image: 'img/deadlift.png'},
 {exerciseId: 2, exerciseName: 'Squat', image: 'img/squat.png'},
 {exerciseId: 3, exerciseName: 'Lunge', image: 'img/lunge.png'},
 {exerciseId: 4, exerciseName: 'Snatch', image: 'img/snatch.png'},
 {exerciseId: 5, exerciseName: 'Overhead Squat', image: 'img/overhead-squat.png'},
];

这是视图中的代码:

<ion-item class="item item-thumbnail-left" ng-repeat="programme in programmes| filter:exerciseID" href="#">

编辑

2 个答案:

答案 0 :(得分:1)

在您看来:

<ion-item class="item item-thumbnail-left" ng-repeat="programme in programmes| filter: filterIds" href="#">

在你的控制器中:

// {{x|filter:filterIds}} will run this function once for each item in x
$scope.filterIds = function(item) {
    if ( $stateParams.exerciseIds.indexOf( item.excerciseID ) > -1 ) {
        return true; // the ID is in the array
    } else {
        return false; // the ID is not in the array
    }       
    // Micro version:
    // return ~$stateParams.exerciseIds.indexOf( item.excerciseID );
}

答案 1 :(得分:0)

这样的事情应该有效

      <ion-item class="item item-thumbnail-left" ng-repeat="programme in programmes|
               filter:doFilter(item)" href="#">


      $scope.doFilter = function(item) {
          return function(programme) {
      //        if programme.id in your list of ones to display 
      //             return true
      //        else 
      //            return false
          };
      };