Удалить фильтр, когда пользователь выбирает значение по умолчанию в select - PullRequest
0 голосов
/ 11 октября 2018

У меня есть проблема с функцией фильтра angularjs по умолчанию.Когда данные загружаются в первый раз, данные загружаются без применения какого-либо фильтра. Это ожидается, и когда я выбираю из выпадающего списка фильтр, работающий, как и ожидалось, с отфильтрованными данными. Но когда в раскрывающемся списке выбора выбирается вариант «Все»,не перепривязывает все данные без применения фильтра. Мне нужно перепривязать все данные без фильтра, когда пользователь ничего не выбирает.Насколько мне известно, это должно работать, я не уверен, что мне не хватает. Вот OldconversationList - это массив объектов. Каждый объект имеет снова несколько объектов массива.

И еще одно требование:

Когда пользователь выбирает из выпадающего списка и вводит некоторый текст в текстовое поле searchtext, он должен применить фильтр с обоими критериями поиска. Если пользователь не выбирает ничего из выпадающего списка и вводит некоторый текст в текстовое поле searchtext, фильтр должен применяться ко всем введенным данным.текст.Пожалуйста, помогите в этом

<div class="modal-body">
                <div class="row" style="padding-bottom:10px">                        
                    <div class="form-group" style="margin:0px">
                        <label class="control-label col-xs-1">Team</label>
                        <div class="col-xs-3">
                            <select ng-model="query" class="form-control input-sm" ng-options="item.TeamID as item.TeamName for item in teams">
                                <option value="">All</option>
                            </select>
                        </div>
                        <div class="col-xs-6">
                            <input type="text" id=searchtext" ng-model="textquery" class="form-control form-control-lg"  placeholder="Search Here" />
                        </div>
                    </div>
                </div>
                <div ng-repeat="conv in OldconversationList | filter :query">
                    <div class="chat_list" data-id="{{conv.GroupID}}" ng-click="currconvid !=conv.GroupID ?loadConver(conv):angular.noop()">
                        <div class="chat_people">
                            <div class="chat_ib">
                                <h5>{{conv.GroupName}}
<span class="chat_date">{{ conv.LastMessageDate|date:'MM/dd/yyyy'}}</span></h5>

                            </div>

                        </div>

                    </div>

                </div>
            </div>

1 Ответ

0 голосов
/ 11 октября 2018

Если вам необходимо использовать textquery, просто добавьте его в качестве фильтра:

"conv in OldconversationList | filter :query | filter :textquery"

Причина, по которой ваш фильтр не работает должным образом при повторном выборе All, заключается в том, что Angular устанавливаетмодель до null при повторном выборе.Это не соответствует пустому значению, которое является undefined.Вы можете исправить это, установив часы на модель и преобразовав их обратно в undefined, если оно станет null:

$scope.$watch('query', function(vNew, vOld){
    if(vNew === null){
        $scope.query = undefined;
    }
})

Вот Рабочая скрипка

...