Олекса Лелека 🎄
Олекса Лелека 🎄
видимо, без песочницы не обойтись
Олекса Лелека 🎄
но пока нету времени, чуть позже сделаю
Олекса Лелека 🎄
попробуй очистить прям перед новым заполнением
пробовала, эта проблема решается, но возвращается предыдущая - при изменении стейта на posts (список постов) в списке на миг появляются пустые поля. Собственно, эту проблему решила обнулением pageContent прямо перед запросом на бэк, но тогда вылазит вопрос с дублированием. Замкнутый круг и мракобесие) Если обнулять и перед запросом и перед заполнением (все уже пробовала) - элементы списка снова дублируются.
Владислав
Ребят есть ресурс http://joxi.ru/n2Ygwe5UojyOMr вот я его вызываю http://joxi.ru/MAjE63lC4voKl2 почему в первом случае добавляет слеш в конце http://joxi.ru/EA4LlQvtwDMNJA
Sergey
Слеш в конце чего, урл?
Владислав
max_ts/
Владислав
а дальше параметры
Владислав
стрелочку же нарисовал там
Stas
пробовала, эта проблема решается, но возвращается предыдущая - при изменении стейта на posts (список постов) в списке на миг появляются пустые поля. Собственно, эту проблему решила обнулением pageContent прямо перед запросом на бэк, но тогда вылазит вопрос с дублированием. Замкнутый круг и мракобесие) Если обнулять и перед запросом и перед заполнением (все уже пробовала) - элементы списка снова дублируются.
Можешь немного подробнее описать что у тебя дублируется. Сколько у тебя постов должно быть, дублируются на секунду или совсем. Дублируются посты с предыдущей страницы или с текущей? По твоему описанию мне кажется что у тебя или массив не очищается до запроса или ты данные как-то не так получаешь/обрабатываешь.
Олекса Лелека 🎄
у тебя постраничная навигация ? используешь trackby $index ? ответ https://ru.stackoverflow.com/questions/705068/angularjs-%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D0%B5%D1%82-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8-ng-repeat
очень похоже на то, что нужно. Вопрос к знатокам, track by что мне указать, чтобы заставить его обновлять DOM даже если все элементы будут одинаковы? Или тут без вариантов?
Sergey
Не использовать трекбай
Олекса Лелека 🎄
Не использовать трекбай
не помогает, равно как и track by $id(item) (что, вроде как, равнозначно)
pa[aad
очень похоже на то, что нужно. Вопрос к знатокам, track by что мне указать, чтобы заставить его обновлять DOM даже если все элементы будут одинаковы? Или тут без вариантов?
суть в чем если ты не пишешь трек бай, то он хеширует по значению, по текущему элементу массива если юзать индекс, он типа рендерит и пишет в кеш по индексу текущий элемент в цикле потом если он снова видит тот же индекс, и он есть в кеше, он не будет рендерить
Sergey
$id это что?
pa[aad
trach by item.id ил как там у вас другие причины почему дублируются данные это уже логика работы в коде, хотя ее там немного
Олекса Лелека 🎄
суть в чем если ты не пишешь трек бай, то он хеширует по значению, по текущему элементу массива если юзать индекс, он типа рендерит и пишет в кеш по индексу текущий элемент в цикле потом если он снова видит тот же индекс, и он есть в кеше, он не будет рендерить
в данный момент у меня при загрузке страницы тянет один и тот же json-файлик с одним и тем же единственным (на данный момент) объектом в массиве постов. Если быстро переключать страницы, оно успевает добавить несколько этих единственных объектов подряд, потом очищает все до единичного :D
Олекса Лелека 🎄
как я поняла, это получаются одинаковые элементы для ангуляра, потому он их не затирает перед записью?
Олекса Лелека 🎄
Давайте с трекингом разберёмся)
так мы вроде все еще разбираемся :)
Sergey
Ну вот $id это ваш сервис какой-то который ид выгребает?
pa[aad
то что я написал, дублируется сам dom по индексу который в кеше но данный у меня другие приходили, так как другую страницу загружал
pa[aad
у вас что-то не то вообще
Олекса Лелека 🎄
Ну вот $id это ваш сервис какой-то который ид выгребает?
ноуп, это взято из оф.документации к ngRepeat
Sergey
Sergey
И правда)
pa[aad
это в какой версии ангуляра такая дока ?
Олекса Лелека 🎄
https://docs.angularjs.org/api/ng/directive/ngRepeat
Олекса Лелека 🎄
Default tracking: $id(): item in items is equivalent to item in items track by $id(item). This implies that the DOM elements will be associated by item identity in the collection.
Sergey
@Nano_Mo вы можете два файла сделать? Ну чтобы это было похоже на реальный кейс. Постоянно один и тот же жсон возвращать бессмысленно
pa[aad
у вас какая версия ?ангуляра
Олекса Лелека 🎄
1.4
pa[aad
все правильно $id берет ваш текущий элемент и использует его в качестве индекса
pa[aad
еще нужно что бы вы показали свой json файл
Sergey
Так тут от реализации $$hashKey зависит
Sergey
Если трекинг дефолтный
Sergey
@Nano_Mo ну или попробуйте добавлять в каждый элемент uuid при получении и трекать по нему
Sergey
Так оно будет думать что элементы разные
Олекса Лелека 🎄
элементы сделала разными, разнесла по разным папочкам в дополнение первый элемент меняется на новый, справа от него "мигает" и исчезает старый элемент
Олекса Лелека 🎄
пробовала без трека вообще и с треком по title-у (точно разному)
Sergey
Вы хотя бы видео можете записать?
Sergey
Скринкаст - как происходит, как ожидается, что не так
Sergey
Потому что я например уже запутался и ничего не понимаю
Олекса Лелека 🎄
видео это не мое. Потом попробую вынести код в песочницу
Sergey
https://embed.plnkr.co/mQUSVxj3PWtZWL0tYD2z/
Sergey
Ну вот, песочница с пагинацией
Sergey
Правда там ng 1.5
Stas
и там нет запросов, там сразу готовый массив
Sergey
Это меняет ничего
Sergey
Версия ангулара - мб, 1.4 старый
Sergey
max_ts/
А почему они у вас в params не объявлены? Вообще $resource на мой взгляд - гадость. Я по крайней мере не осилил. А с тайпингами вообще ужас-ужас
Владислав
@yarrrrrrrr весть проект на них сделан, приходится на них) проблема в серваке , он первый рапрос как то магически обрабатывает, а если там в роуте поставить слеш в конце max_ts/?params то сразу становится все ок ) бред короче
Sergey
То есть вам нужен там слеш?
Sergey
У ресурса есть такая хрень ещё
Sergey
app.config(function($resourceProvider) { $resourceProvider.defaults.stripTrailingSlashes = false; });
Sergey
Но это по идее и на уровне индивидуального ресурса перегрузить можно
Айбек
всем привет ребят, не пинайте сильно, не работал никогда с ангуляр есть массив, прохожу ng-repeat и в зависимости от данных нужно чекнуть чекбокс ng-checked='item.checked ==1' - почему то не чекает, а чекает при ng-model='item.checked'(что странно для меня) и вот на чекбоксе висит обработчик для change но я хотел бы И при проходе зафайрить ивент change, чтобы обработчик сработал, как это и сделать?)
Sergey
А ng-model + ng-change?
Sergey
при проходе это как - hover?
Айбек
то есть при рендере массива, проставляю чекед для чекбокса и как отловить это событие, если при ng-checked не проставляется checked,а только при ng-model
Sergey
Вам надо при первой отрисовке запускать обработчик изменения? Создайте компонент с чекбоксом и там в $onChanges получайте все изменения модели, в т.ч. первоначальное
Sergey
Ну или попробуйте ng-model, ng-changed и ng-init="item.checked"
Айбек
в changed можно выражение передать?
Sergey
Да
Sergey
Если вы про ng-change
Sergey
Я всё время забываю как они правильно называются)
Айбек
в ng-change="Prod.actions.categoryChecked(item)" есть обработчик но при рендере я ставлю чекед по умолчанию для некоторых, и для них как вызвать собыите change?) все еще не могу понять)
Айбек
я думал что при ng-checked='some conditions' вызывается событие change, но почему чекед не проставляется
Айбек
вроде простая задача стоит, но кажется не могу передать правильно что хочу)
Sergey
Покажите пожалуйста пример на plunkr или чём-то таком
Sergey
Если я правильно вообще вас понял, то вы хотите что-то делать когда модели вообще присвоили значение
Айбек
да
Айбек
https://plnkr.co/edit/bervpNRb6GgbdPTRTsQ1?p=catalogue
Айбек
вот при рендере я проставляю чекед в зависимости от входных данных "item.checked" и для них нужно вызвать собыите change, чтобы обработчик Prod.actions.categoryChecked(item) сделал нужные действия