Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Динамический фильтр в ng-repeat (https://javascript.ru/forum/angular/57978-dinamicheskijj-filtr-v-ng-repeat.html)

A1x1On2015 28.08.2015 17:29

Динамический фильтр в ng-repeat
 
Здравствуйте, мой код:

<div class="Tasks" data-ng-init="init()">
        <div>
            <i id="{{y.TaskId}}" ng-repeat="y in Tasks" ng-click="OpenTask($event)" class="iTask">
                <div>{{y.Title}}</div><br />
                <div class="d-disc">{{y.Description}}</div>
                <div class="d-date">

                    <b>Дата:</b> {{y.TaskTerm.substr(0, 10)}}
                </div>
                <div class="d-status"><b>Cтатус:</b> {{y.StatusString}}</div>
                <div class="d-tags"><b>Теги:</b> {{y.Tags}} </div>
            </i>
        </div>


по data-ng-init="init()", при загрузки страницы у меня приходят не фильтрованные данные, так и должно и есть
$scope.init = function () {
            TService.GetTasks().then(function(d) {
                $scope.Tasks = d.data;
            }, function() {
                alert("Fail of deleting task");
            });
        }


по клику на кнопку "фильтровать", динамически данные в ng-repeat должны отфильтровываться, но как это сделать я не пойму
<span id="55" ng-click="filterBy($event)" >фильтровать</span>


Возможно можно как-то вложить $scope после ng-repeat типа:
<i id="{{y.TaskId}}" ng-repeat="y in Tasks {{filter}}

а я по клику в функции бы присваивал значения
$scope.filterBy = function (obj) {
            $scope.filter = "filter:{ Tegs : 'расходы'}";

        }


Помогите пожалуйста

grego 08.09.2015 18:40

1. у ng-repeat есть orderBy функциональность. Почитай тут https://docs.angularjs.org/api/ng/filter/orderBy. В этом же документе посмотри первый пример в Plunker (вот он http://plnkr.co/edit/yKCrobzz8DJirFImgJtL?p=preview).

В целом ты можешь использовать этот же подход
ng-repeat="y in Tasks | orderBy: predicate", где predicate поначалу пустая строка (в этом случае данные будут выводиться в порядке как есть). Соответственно в твоем методе ng-click="filterBy($event)" ты будешь делать что-то вроде $scope.predicate = '/*название поля для фильтрации*/'.
Обрати также внимание что orderBy принимает не только строку-свойство объекта но также и функцию.


Часовой пояс GMT +3, время: 03:22.