Vue. js - Остановить распространение для нескольких обработчиков событий - PullRequest
0 голосов
/ 29 мая 2020

У меня есть компонент, который генерирует событие showSelection при щелчке, но также сохраняет обработчик события щелчка, переданный ему его родителем.

<template>
    <section class="base-input peudo-select">
        <input 
            v-bind="$attrs"
            type="text"
            readonly
            v-on="listeners"
            @dblclick.prevent.stop
        />
    </section>
</template>

<script>
export default {
    ...
    computed:{
        listeners(){
            return {
                ...this.$listeners,
                input: event => this.$emit('input', event.target.value),
                click: [
                    this.$listeners.click, // Always put the parent given handler first.
                    event => this.$emit('showSelection', event),
                ],
            }
        }
    }
    ...
};
</script>

А на его родительском компоненте у меня есть это.

<template>
    <section class="main-page">
        <pseudo-select-input
            tooltip="How would you like to pay?"
            placeholder="Source of Fund"
            @click="selectInputClicked($event)"
            @showSelection="showSelection"
        />
    </section>
</template>

<script>
export default {
    ...
    methods: {
        selectInputClicked(e) {
            console.log('stopping propagation');
            e.stopPropagation();
        },
        showSelection() {
            console.log('starting selection');
        },
    },
    ...
};
</script>

При попытке запустить код оба журнала отображаются, даже когда selectInputClicked пытался остановить распространение.

Я хорошо знаю event.stop, но не хочу, чтобы он всегда останавливал распространение. У меня будут условия, следует ли остановить распространение (например, предыдущий вход пуст).

Нет, мне не нужно делать click.native, так как я «туннелирую» прослушиватели событий компонента на элемент ввода (см. computed -> listeners и v-on="listeners").

См. скрипт здесь

Скрипка не совсем такая же, как выше, но он имеет ту же идею.

Обновление # 1:

Создание исключения в первом обработчике останавливает распространение на следующий. По понятным причинам. это недостаточно хорошо. Я сохраню его на крайний случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...