ghettovoice / vuelayers

Web map Vue components with the power of OpenLayers
https://vuelayers.github.io/
MIT License
682 stars 230 forks source link

infinity update features #457

Closed malkovDanik closed 2 years ago

malkovDanik commented 2 years ago

Vesion "vuelayers": "0.12.0-rc.26", When I use `<vl-style-icon :src="resources/img.svg" :scale="1.5"

for features thencalledupdate:features ` all time. img

ghettovoice commented 2 years ago

Hello @malkovDanik , I can't reproduce your issue on my setup. Can you provide simple demo?

malkovDanik commented 2 years ago

Гайзенбаг! Осталось только картинка, если воспроизведу закину. Также отметили, что очень сильно начинает тормозить если включен Vue DevTools... возможно это как-то связано.

malkovDanik commented 2 years ago

Есть также предложения по поводу #251. В 6.9.0 есть возможность затыкать переопределение стиля interaction select передав ему в options.style = null | false. Предлагаю дать такую возможность и здесь. На текущий момент значение передается в зависимости от this.getStyleTarget(),getStyle() или _style контейнера style-container.js. Я смог его переопределить только через хук таким макаром:

<template>
    <vl-interaction-select
        :layers="['layerId']"
        :hit-tolerance="10"
        :toggleCondition="() => true"
        ref="interaction"
    >
        <template slot-scope="selectScope">
            <!--              <vl-style-func :function="styleForInteraction"></vl-style-func>-->
            <vl-overlay
                v-for="feature in selectScope.features"
                :key="feature.id"
                :id="feature.id"
                :position="feature.geometry.coordinates"
            >
                <p class="content">
                    Always opened overlay for Feature ID
                    <strong>{{ feature.id }}</strong>
                </p>
            </vl-overlay>
        </template>
    </vl-interaction-select>
</template>
<script lang="ts">
export default {
    name: 'interaction-select',
    mounted() {
      // eslint-disable-next-line no-debugger
        debugger;
        this.$refs.interaction._style = false;
    },
};
</script>

В таком случаем стиль при клике переопределяться не будет. Возможно есть метода по проще, но за 5ч мне хватило ума только таким образом :) Казалось бы зачем, если есть style-func. но с ним тоже не все так просто, приходится императивно писать код в class.ts, хотя есть возможность писать на vue. там это намного удобнее и понятнее что-ли. В конце концов и создавался vuelayers я так понимаю :)

ghettovoice commented 2 years ago

VueDevTools может тормозить когда включена вкладка События. OpenLayers и соответсвенно VueLayers тригеррит очень много событий, особенно при смещении/зуме карты.

Насчёт отключения дефолтного стиля через null/false - согласен. Я как то упустил этот момент, надо добавить

malkovDanik commented 2 years ago

Благодарю!