@angular_js

Страница 258 из 325
Sergey
16.05.2018
17:31:34
Ну в смысле как его можно сделать более чем одним способом?

Andrey
16.05.2018
17:31:57
Он же как неймспейс, просто импортируется
вот именно, не знаю что они хотят

Mo
17.05.2018
06:13:45
всем доброе утречко :)

Google
Stas
17.05.2018
06:17:48
я не в теме о чём вы там говорили, но в стрелочных функциях же this не работает

Andrey
17.05.2018
06:18:29
я не в теме о чём вы там говорили, но в стрелочных функциях же this не работает
всмысле не работает ? работает но контекст сохраняется

Stas
17.05.2018
06:20:10
не подсматривай)

Sergey
17.05.2018
06:21:39
попробовала, не работат :)
А вы демку на каком-нибудь планкере можете показать?

Либо вы проверяете на пентиуме 1 либо у вас сверхскоростные глаза 9000

Andrey
17.05.2018
06:22:34
без демки никак

Mo
17.05.2018
06:22:49
демка попозжее :)

Stas
17.05.2018
06:27:52
Я немного не понял как оно удваивает данные, почему бы не очистить массив и потом не записать туда новые данные?

Mo
17.05.2018
06:29:45
А можешь просто вот этот кусок кода показать?
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); }

Google
Sergey
17.05.2018
06:32:18
Я немного не понял как оно удваивает данные, почему бы не очистить массив и потом не записать туда новые данные?
Но там как раз и получается по ходу что почистили массив - побежал дайджест, рипит рисует очистку, потом новые данные, рипит наполняет. Меня пугает только как это можно увидеть. Ну может только если баловаться с $track by $index

Stas
17.05.2018
06:35:03
да
Ты его очищаешь перед запросом в базу, из за этого глазу и видно, может поискать другой вариант?

попробуй очистить прям перед новым заполнением

Mo
17.05.2018
06:35:56
Ты его очищаешь перед запросом в базу, из за этого глазу и видно, может поискать другой вариант?
глазу видно как раз то, что оно не очищается, а вначале элементы прибавляются, а потом уже исчезают

Sergey
17.05.2018
06:36:00
А что может быть с track by $index? :)
То что он не сравнивает содержимое, а только индекс

И соотв не перерисовывает/ведёт себя странно

Кстати похоже на то что вы рассказываете

Попробуйте трекать по ид либо вовсе без

Mo
17.05.2018
06:42:58
видимо, без песочницы не обойтись

но пока нету времени, чуть позже сделаю

попробуй очистить прям перед новым заполнением
пробовала, эта проблема решается, но возвращается предыдущая - при изменении стейта на posts (список постов) в списке на миг появляются пустые поля. Собственно, эту проблему решила обнулением pageContent прямо перед запросом на бэк, но тогда вылазит вопрос с дублированием. Замкнутый круг и мракобесие) Если обнулять и перед запросом и перед заполнением (все уже пробовала) - элементы списка снова дублируются.

Vladislav
17.05.2018
06:55:34
Ребят есть ресурс http://joxi.ru/n2Ygwe5UojyOMr вот я его вызываю http://joxi.ru/MAjE63lC4voKl2 почему в первом случае добавляет слеш в конце http://joxi.ru/EA4LlQvtwDMNJA

Sergey
17.05.2018
06:58:28
Слеш в конце чего, урл?

Vladislav
17.05.2018
06:59:28
max_ts/

Google
Vladislav
17.05.2018
06:59:37
а дальше параметры

стрелочку же нарисовал там

Stas
17.05.2018
07:01:43
пробовала, эта проблема решается, но возвращается предыдущая - при изменении стейта на posts (список постов) в списке на миг появляются пустые поля. Собственно, эту проблему решила обнулением pageContent прямо перед запросом на бэк, но тогда вылазит вопрос с дублированием. Замкнутый круг и мракобесие) Если обнулять и перед запросом и перед заполнением (все уже пробовала) - элементы списка снова дублируются.
Можешь немного подробнее описать что у тебя дублируется. Сколько у тебя постов должно быть, дублируются на секунду или совсем. Дублируются посты с предыдущей страницы или с текущей? По твоему описанию мне кажется что у тебя или массив не очищается до запроса или ты данные как-то не так получаешь/обрабатываешь.

Mo
17.05.2018
07:01:43
у тебя постраничная навигация ? используешь 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
17.05.2018
07:02:54
Не использовать трекбай

Mo
17.05.2018
07:04:27
Не использовать трекбай
не помогает, равно как и track by $id(item) (что, вроде как, равнозначно)

Andrey
17.05.2018
07:04:35
очень похоже на то, что нужно. Вопрос к знатокам, track by что мне указать, чтобы заставить его обновлять DOM даже если все элементы будут одинаковы? Или тут без вариантов?
суть в чем если ты не пишешь трек бай, то он хеширует по значению, по текущему элементу массива если юзать индекс, он типа рендерит и пишет в кеш по индексу текущий элемент в цикле потом если он снова видит тот же индекс, и он есть в кеше, он не будет рендерить

Andrey
17.05.2018
07:05:19
trach by item.id ил как там у вас другие причины почему дублируются данные это уже логика работы в коде, хотя ее там немного

Mo
17.05.2018
07:06:31
суть в чем если ты не пишешь трек бай, то он хеширует по значению, по текущему элементу массива если юзать индекс, он типа рендерит и пишет в кеш по индексу текущий элемент в цикле потом если он снова видит тот же индекс, и он есть в кеше, он не будет рендерить
в данный момент у меня при загрузке страницы тянет один и тот же json-файлик с одним и тем же единственным (на данный момент) объектом в массиве постов. Если быстро переключать страницы, оно успевает добавить несколько этих единственных объектов подряд, потом очищает все до единичного :D

как я поняла, это получаются одинаковые элементы для ангуляра, потому он их не затирает перед записью?

Mo
17.05.2018
07:08:08
Давайте с трекингом разберёмся)
так мы вроде все еще разбираемся :)

Sergey
17.05.2018
07:08:26
Ну вот $id это ваш сервис какой-то который ид выгребает?

Andrey
17.05.2018
07:08:35
то что я написал, дублируется сам dom по индексу который в кеше но данный у меня другие приходили, так как другую страницу загружал

у вас что-то не то вообще

Mo
17.05.2018
07:08:47
Ну вот $id это ваш сервис какой-то который ид выгребает?
ноуп, это взято из оф.документации к ngRepeat

Andrey
17.05.2018
07:09:01
Google
Sergey
17.05.2018
07:10:03


И правда)

Andrey
17.05.2018
07:10:44
это в какой версии ангуляра такая дока ?

Mo
17.05.2018
07:10:57
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
17.05.2018
07:11:28
@Nano_Mo вы можете два файла сделать? Ну чтобы это было похоже на реальный кейс. Постоянно один и тот же жсон возвращать бессмысленно

Andrey
17.05.2018
07:11:32
у вас какая версия ?ангуляра

Andrey
17.05.2018
07:12:22
все правильно $id берет ваш текущий элемент и использует его в качестве индекса

еще нужно что бы вы показали свой json файл

Sergey
17.05.2018
07:15:40
Так тут от реализации $$hashKey зависит

Если трекинг дефолтный

@Nano_Mo ну или попробуйте добавлять в каждый элемент uuid при получении и трекать по нему

Так оно будет думать что элементы разные

Mo
17.05.2018
07:18:25
элементы сделала разными, разнесла по разным папочкам в дополнение первый элемент меняется на новый, справа от него "мигает" и исчезает старый элемент

пробовала без трека вообще и с треком по title-у (точно разному)

Sergey
17.05.2018
07:19:33
Вы хотя бы видео можете записать?

Скринкаст - как происходит, как ожидается, что не так

Потому что я например уже запутался и ничего не понимаю

Google
Mo
17.05.2018
07:21:50
видео это не мое. Потом попробую вынести код в песочницу

Sergey
17.05.2018
07:23:29
https://embed.plnkr.co/mQUSVxj3PWtZWL0tYD2z/

Ну вот, песочница с пагинацией

Правда там ng 1.5

Stas
17.05.2018
07:25:41
и там нет запросов, там сразу готовый массив

Sergey
17.05.2018
07:26:52
Это меняет ничего

Версия ангулара - мб, 1.4 старый

max_ts/
А почему они у вас в params не объявлены? Вообще $resource на мой взгляд - гадость. Я по крайней мере не осилил. А с тайпингами вообще ужас-ужас

Vladislav
17.05.2018
07:41:56
@yarrrrrrrr весть проект на них сделан, приходится на них) проблема в серваке , он первый рапрос как то магически обрабатывает, а если там в роуте поставить слеш в конце max_ts/?params то сразу становится все ок ) бред короче

Sergey
17.05.2018
07:43:02
То есть вам нужен там слеш?

У ресурса есть такая хрень ещё

app.config(function($resourceProvider) { $resourceProvider.defaults.stripTrailingSlashes = false; });

Но это по идее и на уровне индивидуального ресурса перегрузить можно

Aibek
17.05.2018
08:18:51
всем привет ребят, не пинайте сильно, не работал никогда с ангуляр есть массив, прохожу ng-repeat и в зависимости от данных нужно чекнуть чекбокс ng-checked='item.checked ==1' - почему то не чекает, а чекает при ng-model='item.checked'(что странно для меня) и вот на чекбоксе висит обработчик для change но я хотел бы И при проходе зафайрить ивент change, чтобы обработчик сработал, как это и сделать?)

Sergey
17.05.2018
08:21:00
А ng-model + ng-change?

при проходе это как - hover?

Aibek
17.05.2018
08:25:47
то есть при рендере массива, проставляю чекед для чекбокса и как отловить это событие, если при ng-checked не проставляется checked,а только при ng-model

Sergey
17.05.2018
08:29:52
Вам надо при первой отрисовке запускать обработчик изменения? Создайте компонент с чекбоксом и там в $onChanges получайте все изменения модели, в т.ч. первоначальное

Ну или попробуйте ng-model, ng-changed и ng-init="item.checked"

Aibek
17.05.2018
08:36:00
в changed можно выражение передать?

Sergey
17.05.2018
08:36:28
Да

Страница 258 из 325