Size: a a a

Angular - русскоговорящее сообщество

2019 November 19

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
так, тогда прямо зайду с вопроса. Есть у меня карта, на вход которой я подаю массив маркеров <leaflet-map [markers]="markers"> — маркеры в массив markers ко мне приходят из вебсокета и у меня либо дополняется массив markers новыми маркерами, либо у какого-то маркера меняются координаты, если от вебсокета пришёл маркер, который у меня уже есть в массиве. Так вот я не понимаю — мне каждый раз массив markers клонировать, при любом его изменении, чтобы сработал change-детекшен в карте?

в карте маркеры выводятся вот так:

<div class="leaflet-map__marker" *ngFor="let marker of markers; trackBy: trackMarkerBy">
   <leaflet-marker [map]="map" [center]="marker.coords"></leaflet-marker>
</div>
источник

G

Gennady in Angular - русскоговорящее сообщество
Smooth Operator
ну, слушай события роутинга, если будет переход на страницу без языка, делай редирект на страницу с языком...
я как раз думал о том чтобы, напишу штуку, которая будет следить за изменением языка, брать урл, менять его, а потом делать navigateByUrl, но это будет + 1 ненужный редирект, которого по факту нет )

Пойду еще повоюю, и если что буду делать через эту фиговину с подпиской на навигацию ) Спасибо за ответы )
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Gennady
я как раз думал о том чтобы, напишу штуку, которая будет следить за изменением языка, брать урл, менять его, а потом делать navigateByUrl, но это будет + 1 ненужный редирект, которого по факту нет )

Пойду еще повоюю, и если что буду делать через эту фиговину с подпиской на навигацию ) Спасибо за ответы )
повоюй чтобы язык не менялся динамически)
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Артур Мудрик
так, тогда прямо зайду с вопроса. Есть у меня карта, на вход которой я подаю массив маркеров <leaflet-map [markers]="markers"> — маркеры в массив markers ко мне приходят из вебсокета и у меня либо дополняется массив markers новыми маркерами, либо у какого-то маркера меняются координаты, если от вебсокета пришёл маркер, который у меня уже есть в массиве. Так вот я не понимаю — мне каждый раз массив markers клонировать, при любом его изменении, чтобы сработал change-детекшен в карте?

в карте маркеры выводятся вот так:

<div class="leaflet-map__marker" *ngFor="let marker of markers; trackBy: trackMarkerBy">
   <leaflet-marker [map]="map" [center]="marker.coords"></leaflet-marker>
</div>
да, надо менять ссылку на массив
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
ясно, просто вот тут как раз думал взять и убрать OnPush с карты — тогда было бы легче 🙂
источник

G

Gennady in Angular - русскоговорящее сообщество
Smooth Operator
повоюй чтобы язык не менялся динамически)
ага)
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
у меня менялся бы массив и я бы запускал changeDetectionRef.detectChanges()
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Артур Мудрик
ясно, просто вот тут как раз думал взять и убрать OnPush с карты — тогда было бы легче 🙂
это ничего не изменило бы
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
выше дописал
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
ничего не изменило бы)
источник

I

Iso in Angular - русскоговорящее сообщество
Артур Мудрик
ясно, просто вот тут как раз думал взять и убрать OnPush с карты — тогда было бы легче 🙂
если уберешь то все твои условия много раз будет проверятся
а это не хорошо
лучше один раз клон сделать
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
ок, так и сделал
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Iso
если уберешь то все твои условия много раз будет проверятся
а это не хорошо
лучше один раз клон сделать
то что запуск ченж детекшена приведет к перерасчету маркеров еще не факт
источник

I

Iso in Angular - русскоговорящее сообщество
что ты имеешь ввиду
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
Smooth Operator
то что запуск ченж детекшена приведет к перерасчету маркеров еще не факт
не, мануальный запуск чендж детекшена я тоже убрал
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
что бы знать что ченж детекшен приведет в переасчету каких то данных
нужно знать конкретную реализацию дочернего компонента
источник

I

Iso in Angular - русскоговорящее сообщество
а че там знать ?
передал новый данный и переасчет сработал
если объект передаешь надо чтобы был другой объект
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
да
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
теперь дело такое — есть карта, на ней рисуются различные шейпы и маркеры — <leaflet-map [shapes]="shapes" [markers]="markers"> — на карте шейпы не меняются, но меняются каждый раз маркеры — они постоянно перемещаются. Нужно сделать так, чтобы шейпы определяли, попали ли в их область какие-то маркеры и, например, окрашивать себя в красный цвет. Вот так выглядят компоненты:

<div class="leaflet-map__shape" *ngFor="let shape of shapes">
   <div [ngSwitch]="shape.type">
       <div *ngSwitchCase="'circle'">
           <leaflet-circle [map]="map" [geometry]="shape.data"></leaflet-circle>
       </div>

       <div *ngSwitchCase="'polygon'">
           <leaflet-polygon [map]="map" [geometry]="shape.data"></leaflet-polygon>
       </div>
   </div>
</div>

<div class="leaflet-map__marker" *ngFor="let marker of markers; trackBy: trackMarkerBy">
   <leaflet-marker [map]="map" [center]="marker.coords"></leaflet-marker>
</div>


Так вот вопрос, если я добавлю в компоненты <leaflet-circle> и в <leaflet-polygon> инпут с маркерами — [markers]="markers" — и в `ngOnChanges`-хуке буду рассчитывать коллизии маркеорв с шейпом, то это будет ок?
источник

АМ

Артур Мудрик in Angular - русскоговорящее сообщество
ну, тобишь, а если на карту будет 100 шейпов? и 1000 маркерв?
источник