Anonymous
Свеженький лонгрид. Вери лонг рид http://graph.org/Roman-v-Tajlande-05-15
Олекса Лелека 🎄
всем привет, я по рекоммендации, с вопросом :) ng-repeat создает свой собственный scope, верно? Почему количество элементов в этом scope может быть больше, чем количество элементов в коллекции? (создает 6, потом загружает туда 2 из коллекции)
Sergey
А у вопроса есть какое-то практическое применение? Ну просто интересно)
Sergey
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngRepeat.js
Sergey
Там в скоуп каждого элемента ещё внедряются переменные
Sergey
Не оно?
Олекса Лелека 🎄
как я поняла, он не успевал почистить массив с объектами, которые нужно было отобразить, и менял данные в списке на ходу, из-за этого все дергалось на практике - вывожу список постов на страницу, с данными аля автор, текст и т.д. предыдущую проблему решила принудительной очисткой списка перед обновлением в нем информации; сейчас другая проблема, хотя выглядит похоже: при обновлении массива с постами ng-repeat вначале добавляет обновленные посты, а затем затирает старые, из-за чего вместо 2 выводит 4, потом уменьшает до 2
Sergey
Пагни, женщина в чате. Живая женщина. Я видел единорога :D
Олекса Лелека 🎄
но страница уже отрендерена, мне нужно менять список при переходе на следующую страничку, без перезагрузки оной
Oleg
думала о таком, но это как-то жестко выходит)
нет) это в бест практис есть) по улучшению производительности)
Олекса Лелека 🎄
вроде того, да
Олекса Лелека 🎄
пагинация самая обычная, при переходе на другую страницу - новый запрос на сервер, получение списка постов и вывод их на страницу
Oleg
вроде того, да
тут можно использовать и первое топорное решение отчищаете этот список при переходе на страницу ждёте что он удалится из дома заполняете список
Sergey
А в чём проблема вообще? Почему массив меняется несколько раз?
Sergey
Запросов вообще сколько?
Олекса Лелека 🎄
столько, сколько страниц :) на каждую страницу грузим отдельный список
Sergey
Ну с бэка приходит массив, рвём ссылку на старый, всё круто
Sergey
Или так не работает?
Олекса Лелека 🎄
Олекса Лелека 🎄
Ну с бэка приходит массив, рвём ссылку на старый, всё круто
на данный момент я просто перезаписываю массив с постами на новый. В результате он вначале добавляет новые посты, потом удаляет старые. Происходит быстро, но глазу заметно - все вначале удваивается, потом становится нормальным
Олекса Лелека 🎄
это попытка вылечить перелом пластырем?
Oleg
$timeout(() => {this.data = [];}).then(() => {this.data = новые данные}) самое частое
Sergey
Ну репит обязан отработать очистку массива уничтожением дом элементов
Sergey
Я не понимаю что вы хотите
Sergey
$timeout(() => {this.data = [];}).then(() => {this.data = новые данные}) самое частое
Так это просто запуск дайджеста, в чём ноухау?)
Sergey
Перерисовываться оно будет точно так же
Oleg
Так это просто запуск дайджеста, в чём ноухау?)
не ноу хау. ждём дом по 0 таймаута. берём ангуляровский чтобы зэн повесить, так можно было и ванильный брать
Sergey
Ну то есть что там таймаут даёт, зачем он там, зачем мы стучим в этот бубен, с какой целью?
Oleg
чтобы он сто пудово отчистился я писал выше что видел описанную проблему с ван вэй + инлан фильтр и трэк бай
Sergey
Oleg
к сожалению, не сработало
тогда, наверное, чтобы все смогли оказать должную помощь, есть смысл попробовать в песочнице воспроизвести поведение и скинуть сюда в чат
Олекса Лелека 🎄
вначале сработало, но я хз, что изменилось :D завтра попробую упесочить
Sergey
@Mo вы можете доступно описать проблему? Вот эти ваши эволюции списка это ненормально
Олекса Лелека 🎄
завтра :3 так или иначе, всем спасибо!
Sergey
Было бы здорово в песочнице воспроизвести, а то без кода гадание на гуще
Oleg
завтра :3 так или иначе, всем спасибо!
я ошибся в Вашем случае будет точнее вот так this.data = []; setTimeout(() => { this.data = новые данные }, 0);
Олекса Лелека 🎄
попробую завтра
Dmitry
Подскажите, есть sdk, нужно из него собрать angular module. Есть какой то гайд толковый что за чем делать?
Sergey
А что там вообще с модулем
Sergey
Он же как неймспейс, просто импортируется
Sergey
Ну в смысле как его можно сделать более чем одним способом?
pa[aad
Он же как неймспейс, просто импортируется
вот именно, не знаю что они хотят
Олекса Лелека 🎄
всем доброе утречко :)
Stas
я не в теме о чём вы там говорили, но в стрелочных функциях же this не работает
pa[aad
я не в теме о чём вы там говорили, но в стрелочных функциях же this не работает
всмысле не работает ? работает но контекст сохраняется
Stas
не подсматривай)
Sergey
попробовала, не работат :)
А вы демку на каком-нибудь планкере можете показать?
Sergey
Либо вы проверяете на пентиуме 1 либо у вас сверхскоростные глаза 9000
pa[aad
без демки никак
Олекса Лелека 🎄
демка попозжее :)
Stas
Я немного не понял как оно удваивает данные, почему бы не очистить массив и потом не записать туда новые данные?
Олекса Лелека 🎄
А можешь просто вот этот кусок кода показать?
let getPosts = function(category, id, pageNumber, postsPerPage) { $scope.pageContent = null; postsBlockService.getPosts(category, id, pageNumber, postsPerPage).then(function (response) { if (Array.isArray(response.data.data)) { // if response is an array (posts list) response.data.data.forEach(elem => { elem.descr = elem.descr.slice(0, 150) + '...'; }); $scope.pagination.totalPostsCount = response.data.totalPostsCount; $scope.pagination.postsPerPage = response.data.postsPerPage; $scope.updatePagination(); } else if (response.data.data && typeof response.data.data === 'object' && response.data.data.constructor === Object) { // if response is an object (single post) response.data.data.topPosts.forEach(elem => { elem.descr = elem.descr.slice(0, 100) + '...'; }); response.data.data.similiarPosts.forEach(elem => { elem.descr = elem.descr.slice(0, 200) + '...'; }); } $timeout(() => {$scope.pageContent = response.data.data}, 0) // $scope.pageContent = response.data.data; $window.scrollTo(0, 0); }, handleError); }
Sergey
Я немного не понял как оно удваивает данные, почему бы не очистить массив и потом не записать туда новые данные?
Но там как раз и получается по ходу что почистили массив - побежал дайджест, рипит рисует очистку, потом новые данные, рипит наполняет. Меня пугает только как это можно увидеть. Ну может только если баловаться с $track by $index
Олекса Лелека 🎄
Stas
да
Ты его очищаешь перед запросом в базу, из за этого глазу и видно, может поискать другой вариант?
Stas
попробуй очистить прям перед новым заполнением
Олекса Лелека 🎄
Ты его очищаешь перед запросом в базу, из за этого глазу и видно, может поискать другой вариант?
глазу видно как раз то, что оно не очищается, а вначале элементы прибавляются, а потом уже исчезают
Sergey
А что может быть с track by $index? :)
То что он не сравнивает содержимое, а только индекс
Sergey
И соотв не перерисовывает/ведёт себя странно
Sergey
Кстати похоже на то что вы рассказываете
Sergey
Попробуйте трекать по ид либо вовсе без