2016-01-08 3 views
1

Я хотел бы отфильтровать ng-repeat, что у меня есть выбор и вход. Если входной сигнал установлен на all, тогда фильтр по всем полям, если он установлен на другое значение выбора, а затем фильтрует только в этом поле.Поле с определенным угловым фильтром, основанное на выборе

У меня есть HTML, который выглядит, как этот

<input type="search" class="form-control" id="searchBox" ng-model="searchText"> 

<select class="form-control" id="searchType" name="searchType" ng-model="searchType"> 
    <option value="all">All Fields</option> 
    <option value="locationCode">Location Code</option> 
</select> 

<!-- more code --> 

<tr ng-if="!searchAll" ng-repeat="location in locations | filter:{searchType: searchText}" ts-repeat> 
<tr ng-if="searchAll" ng-repeat="location in locations | filter:searchText" ts-repeat> 

Я также обновляя $location.search() когда либо выбрать или вход меняются, но это должно быть соответствующая часть моего контроллера:

$scope.$watch('searchType', function(value) { 
    $location.search('t', value).replace(); 
    $scope.searchAll = $scope.searchType === 'all'; 
}); 

Мой фильтр работает правильно, когда выбрано all, но при отсутствии другого значения он не отображает никаких данных. Однако он работает, если я жестко задал одно из значений поля в searchType в первом ng-if.

Какая очевидная вещь мне не хватает?

ответ

1

Я не думаю, что значение левой руки в объекте может быть переменной. Так что, когда вы делаете это

location in locations | filter:{searchType: searchText} 

Вы один ожидал фильтр, чтобы найти свойство с именем searchType вместо locationCode

Я думаю, самое простое исправление было бы создать функцию фильтра в контроллере и отрегулировать переключатель в там.

Что-то вроде:

$scope.propertyFilter = function(item) { 
    return item[$scope.searchType] == $scope.searchText; 
} 

А потом внутри шаблона

location in locations | filter:propertyFilter 

Мне также интересно, если лечение объекта в виде строки может работать. Что-то вроде этого:

location in locations | filter:{{"{" + searchType + ":" + searchText + "}"}} 
+0

Я все еще пытаюсь заставить это работать, как я хочу, но я верю, что ваше первое решение привело меня в правильном направлении. – duffn

Смежные вопросы