Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   ng-repeat и фильтрация (https://javascript.ru/forum/angular/54661-ng-repeat-i-filtraciya.html)

Alexej 26.03.2015 18:02

ng-repeat и фильтрация
 
Добрый вечер. Проблема такая: есть такой "ng-repeat" - ng-repeat="item in getRecentContacts()" который рисует массив(результат функции getRecentContacts)

$scope.getRecentContacts = function() {
                return allContacts.filter(function(contact){
                    if(!$scope.search){
                        return allContacts;
                    } else {
                        var filtered = [];
                        var letterMatch = new RegExp($scope.search, 'i');
                        for (var i = 0; i < allContacts.length; i++) {
                            var item = allContacts[i];
                            if (letterMatch.test(item.isDateRecent ? item.isDateRecent.dateRecentName : '' ||
                                (item.data.lastName) ? item.data.lastName.substring(0, item.data.lastName.length) :
                                item.data.name.substring(0, item.data.name.length))) {
                                filtered.push(item);
                            }
                        }
                        return filtered;
                    }
                });
            };


При вводе в поисковое поле ($scope.search) критерия поиска фильтрация отрабатывает, возвращает отфильтрованный массив, но отфильтрованный массив не рендерится. В чем может быть проблема?

Alexej 27.03.2015 11:05

Разобрался. Теперь рендерит:)

$scope.getRecentContacts = function() {
                return allContacts.filter(function(contact){
                    if(!$scope.search){
                        return allContacts;
                    } else {
                        var letterMatch = new RegExp($scope.search, 'i');
                        if (letterMatch.test(contact.isDateRecent ? contact.isDateRecent.dateRecentName : '' ||
                            (contact.data.lastName) ? contact.data.lastName.substring(0, contact.data.lastName.length) :
                            contact.data.name.substring(0, contact.data.name.length))) {
                            return contact;
                        }
                    }
                });
            };

infarkt 16.04.2015 07:33

хм интересно, не понятно зачем фильтр обёрнут в функцию, если всё в одном контроллере, смысла передавать 'i' нет. Сам не люблю инъекции в HTML, но ng-repeat гибок,
ng-repeat='data in data_list_filter = (data_list | filter:content_filter) | orderBy:sort_field:sort_reverse | Pagination:pageNo:itemsPage'


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