2013-07-25 2 views
3

Фон: Я работал над преобразованием нескольких страниц в наших приложениях, чтобы использовать AngularJS как попытку капитального ремонта архитектуры. Пока Угловая оказалась дружелюбной ко мне, а ее кривая обучения довольно резкая, но все в порядке.Как скрыть строки в ng-сетке

На одной из наших главных страниц у нас есть slickgrid, и я решил использовать ng-grid вместо slickgrid, чтобы спасти себя от головной боли в моем первом проходе. Из-за характера нашего приложения одни и те же данные будут отфильтровываться/не фильтроваться многократно в течение жизненного цикла страницы. Весь набор данных всегда будет оставаться одним и тем же, и пока есть только 20-40 точек данных.

Функциональность: он работает нормально, переназначив данные для gridOptins.data. Тем не менее, наблюдается серьезная производительность, так как память увеличилась с ~ 20 МБ до ~ 64 МБ только в течение нескольких циклов фильтрации. И это медленно (> 40 мс), чтобы сетка завершила повторную визуализацию. Профилировщик временной шкалы показывает, что огромное количество DOM создается каждый раз при изменении данных в сетке.

Я убедился в том, что нередко часто удалять/вставлять точки данных из ng-сетки, и я ищу обходное решение этой проблемы. Один из них просто скрывает точку данных, но я еще не видел примеры, иллюстрирующие это.

Другие предложения также приветствуются.

редактировать: Вот plunkr:

http://plnkr.co/edit/dgA2HW

Попробуйте щелкнуть фильтр часто и смотреть общий объем памяти, строить себя вверх.

+1

Какой браузер вы используете? Я заметил много использования памяти в IE. Мы фактически переходим на Таблицы данных, так как у него нет проблем с памятью. –

+0

Я использовал Chromium на Ubuntu, когда впервые увидел проблему. Я могу проверить, что проблема с утечкой памяти также произошла в Chrome на Mac, хотя и в меньшей степени. – Ekkmanz

+0

см. Здесь http://www.bennadel.com/ru/blog/2485-Рабочие-With-Inherited-Collections-In-AngularJS.htm – bresleveloper

ответ

0

Вы можете использовать filterText из сетки ...

$scope.randomfilter = function() { 

    $scope.gridOptions.$gridScope.filterText = Math.ceil(24 * Math.random()); 
}; 

$scope.resetfilter = function() { 
    $scope.gridOptions.$gridScope.filterText = ""; 
}; 

http://plnkr.co/edit/DmgIS9?p=preview