Как отфильтровать значения полученные из ng-repeat?

Добрый день. Имееться ng-repeat тэг который выводит значения из объекта. Хочу сделать возможность фильтрации по двум значениям (в данном случе по минимальной и максимальной цене)

<th>
				<label for="priceMin">Цена от:</label>
				<input id = 'priceMin' class="form-control"  type="text" ng-model="priceRangeMin" />
				<label for="priceMax">до:</label>
				input id = 'priceMax' class="form-control"  type="text" ng-model="priceRangeMax" />
			</th>
		</tr>
	</thead>
	<tr ng-repeat="tablet in tablets | filter:priceRangeFilter(priceRangeMin, priceRangeMax)| orderBy:choosedFilter">
		<td>{{$index + 1}}</td>
		<td>{{tablet.name}}</td>
		<td>{{tablet.price | currency}}</td>
		<td>{{tablet.year}}</td>
		<td>{{tablet.company}}</td>
		<td>{{tablet.rate}}</td>

Выше кусок кода с 2мя инпутами куда я ввожу значения максимальной и минимальной цены а также сам ng-repeat с фильтрами. Ниже функция из контроллера. console.log для дебага вывоит нужные значения. Я понимаю что проблема скрыта в том нужно приравнивать не к $scope.price, но не могу понять к чему...
$scope.priceRangeFilter = function(priceRangeMin, priceRangeMax){
        if (priceRangeMax === undefined) priceRangeMax = 1;
        if(priceRangeMin === undefined) priceRangeMin = 1;
        console.log(priceRangeMax);
        console.log(priceRangeMin);
        return $scope.price >= priceRangeMin
    };
  • Вопрос задан
  • 276 просмотров
Решения вопроса 1
P1sar
@P1sar Автор вопроса
Вообщем погуглил и сделал так. В контроллере создал новый фильтр и добавил его в шаблон. Все работает... Может кому пригодиться.
myApp.filter('priceRangeFilter', function () {
    return function (items, priceRangeMin, priceRangeMax) {
        if (priceRangeMax === undefined) priceRangeMax = 999999;
        if (priceRangeMin === undefined) priceRangeMin = 0;
        var filtered = [];
        for (var i = 0; i < items.length; i++){
            var item = items[i];
            if (item.price >= +priceRangeMin){
                if(item.price <= +priceRangeMax){
                    filtered.push(item);
                }
            }
        }
        return filtered
    };
});


<tr ng-repeat="tablet in tablets | priceRangeFilter:priceRangeMin:priceRangeMax| orderBy:choosedFilter">
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
streetflush
@streetflush
Правильно думаете, попробуйте передавать в функцию фильтрации tablet
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Хватит пытаться все делать в шаблонах. Вынесите логику хотя бы в контроллер (а лучше в сервис, но я думаю подобного просить уже слишком много).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы