Как я могу отфильтровать массив внутри массива объектов, используя фильтр? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть множество продуктов и моделей, которые я использую 'фильтр'

var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {

  $scope.products = [{
      'id': 1,
      'category': 'Tv',
      'models': [{
          'modelno': 12,
          'modelname': 'ASF456'

        },
        {
          'modelno': 13,
          'modelname': 'Aip456'

        }
      ]
    },

    {
      'id': 2,
      'category': 'Mobile',
      'models': [{
          'modelno': 21,
          'modelname': 'FGH74'

        },
        {
          'modelno': 22,
          'modelname': 'UIO06'

        }
      ]

    }

  ];

  $scope.search = '';
  $scope.filterData = function() {
    return $scope.products.filter(function(item) {

      return (item.id.toString().indexOf($scope.search) > -1

        ||
        (item.category.toLowerCase().indexOf($scope.search)) > -1)



    });

  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<body ng-app="myApp" ng-controller="myCtrl">
  <input type="text" ng-model="search">
  <h1 ng-repeat="x in filterData() | filter :search">{{x.id}} {{x.category}}</h1>
</body>

для фильтрации этих товаров по идентификатору и категории.Фильтр работает, но я хочу добавить еще одно поле внутри имени модели фильтра.

Как настроить фильтр так, чтобы он применялся только к полю id, категории и имени модели моего массива, а не к каждому полю?

Как настроить фильтр так, чтобы он применялся только к полю идентификатора, категории и имени модели моего массива, а не ко всем полям?

я хочу фильтровать по категории идентификатора, имени модели

сейчасэти два поля id, фильтр категорий выполнен, но я хочу добавить также имя модели, но имя модели находится внутри массива моделей, здесь я столкнулся с проблемой

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Правильно ли я понял - вы хотите отфильтровать $scope.products с помощью id?если это так, попробуйте так:

<input ng-model="id " type="number" min="0"/>
<br />
<div ng-repeat="x in products | IDFiletr:id">
  {{x.category}}
  <br />
</div>

JS:

app.filter('IDFiletr',function(){
    return function(data, id) {
        if (!id) return data;
        var ids = [];
        angular.forEach(data, function(item){
            if(item.id === id) {
                ids.push(item);
            }
        });
        return ids;
    };
});

plunker: http://plnkr.co/edit/q9DsvZP4scA1oKsJj3Vu?p=preview

0 голосов
/ 22 ноября 2018

Вы можете добавить другое или условие, подобное этому

 || (item.models !== null && item.models.length > 0 && item.models.filter(e => {return e.modelname.search($scope.search) > 0 }).length > -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...