2013-04-25 3 views
4

Я хочу посмотреть событие фильтрации из моей директивы, когда происходит фильтрация на ngRepeat. Есть ли событие, которое возникает при фильтрации?Наблюдать за фильтрованием события в AngularJS - lazy loading images

Что я делаю, это осуществление ленивой загрузки изображений для списка миниатюр. Он работает, но когда я начинаю фильтровать, изображения, которые были вне видимости и видны после фильтрации, должны заменить атрибут ng-src.

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

TemplateBrowser.directive('lazySrc', function() { 
    return function(scope, element, attrs) { 
     function replaceSrc() { 
      if (element.is(":in-viewport")) { 
       attrs.$set('ngSrc', attrs.lazySrc); 
      } 
     } 

     $(window).scroll(function() { 
      replaceSrc(); 
     }); 

     scope.$watch('filteredTemplates', function() { 
      replaceSrc(); 
     }); 
    }; 
}); 

HTML

<li ng-repeat="template in filteredTemplates = (templates | filterByCategory: selectedCategories | filter: searchFilter)"> 
    <img ng-src="" lazy-src="{{template.cover.thumb.url}}" alt=""> 
</li> 

В настоящее время я получаю эту ошибку:

Error: 10 $digest() iterations reached. Aborting! 

TLDR: Вместо просмотра фильтрованной коллекции для изменений есть ли способ испустить какое-то фильтрующее событие, которое будет прослушивать директива? (фильтрация происходит через поле поиска и меню выбора категорий)

ответ

4

Это потому, что у вас нет стабилизированной модели в вашей директиве ng-repeat.

Если инициализировать filteredTemplates модели заранее, вы должны видеть, что это работает:

<ul ng-init="filteredTemplates=(templates | filterByCategory: selectedCategories | filter: searchFilter)"> 
    <li ng-repeat="template in filteredTemplates"> 
    ... 

Я создал скрипку, который демонстрирует это: http://jsfiddle.net/f757U/

Вы можете найти подробные разъяснения в отношении такого поведения в следующем сообщений:

+0

Извините за задержку, что проект на удержание на некоторое время. Кажется, что это работает, если у вас есть данные сразу. Я сталкиваюсь с проблемами, когда данные являются обещанием. Спасибо за толчок вперед! –

+0

Привет, У меня такая же проблема, но мне нужно, чтобы она работала вот так. http://jsfiddle.net/f757U/ – egermano

0

Проверить это https://github.com/revolunet/rn-lazy

Существует также carousel решение от тех же блестящих парней

+0

Не похоже, что rn-lazy на самом деле является ленивой загрузкой. Все, что он делает, показывает вращатель, пока изображение загружается. То, что я пытаюсь достичь, не позволяет клиенту запрашивать изображения, если они фактически не находятся в видовом экране, поскольку это сэкономит много данных/запросов на странице, заполненной изображениями. –

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

  • Нет связанных вопросов^_^