Подтвердить что ты не робот

Простое одностороннее связывание для ng-repeat?

Я прочитал несколько статей, в которых ng-repeat привел к плохой производительности, если было более 2000 элементов, потому что слишком много двусторонних ссылок для просмотра. Я новичок в angularjs и не понимаю взаимосвязи между ng-repeat и двусторонней привязкой:

  • Неужели ng-repeat (например, вывод списка объектов json) обязательно создает двустороннюю привязку?

  • Есть ли простой способ сделать ng-repeat, используя только один способ привязки? (желательно не нужен внешний модуль)

4b9b3361

Ответ 1

Как упоминается user1843640, если вы находитесь на Angular 1.3, вы можете использовать одноразовую привязку, но для простоты вам нужно поставить:: на все привязки, а не только на ретранслятор. Документы говорят об этом:

<div ng-repeat="item in ::items">{{item.name}}</div>

Но, если я посчитаю наблюдателей, это только удалило. Чтобы действительно удалить количество двусторонних привязок, поместите:: на привязки в ретрансляторе, например:

<div ng-repeat="item in ::items">{{::item.name}}</div>

Вот два plunkers, которые будут отображать количество наблюдателей:

Все привязки
Только ретранслятор

Благодарим меня за Miraage за то, что он вызвал функцию для подсчета наблюдателей fooobar.com/questions/45027/...

Ответ 2

Для тех, кто использует или обновляется до Angular 1.3, вы можете использовать "одноразовую привязку". Для ng-repeat это будет выглядеть так:

<div ng-repeat="item in ::items">{{item.name}}</div>

Обратите внимание на синтаксис ::items.

Для получения дополнительной информации просмотрите документацию Angular для выражений.

Ответ 3

В этом сообщении в блоге представлены интересные решения. Конечный результат:

Перейдите на AngularJS 1.1.5 и используйте limitTo вместе с Бесконечная прокрутка. AngularJS ng-repeat предлагает версию 1.1.4 для опции limitTo. Я слегка адаптировал директиву Infinite Scroll для создания прокрутки внутри контейнера, который не имеет высоты 100% окна.

В основном вы ограничиваете количество объектов, которые вы изначально визуализируете, затем используйте директиву прокрутки Infinite для рендеринга по мере необходимости. Поскольку вы не хотите внешний модуль, просто подражайте бесконечным функциям прокрутки по мере необходимости с помощью собственного script.

Примечание. Это должно решить вашу проблему с производительностью, но не удалит двустороннюю привязку.

Ответ 4

  • то, что когда-либо генерируется ng-моделью, будет иметь наблюдателя на данных (модели), что снижает производительность страницы, если она пересекает 200 наблюдателей.

  • Обратитесь к этому разделу для ОДНОГО ПУТИ BINDING http://blog.scalyr.com/2013/10/31/angularjs-1200ms-to-35ms/, но убедитесь, что используете его правильно

Надеюсь, это поможет!!!