@EVOSandru6

Как во vuejs при событии в изолированном компоненте — потушить свойство в братских компонентах на одном уровне?

Добрый день,

Есть один parent компонент, в котором содержатся дочерние компоненты child.*

parent
child
child
child
...
child

В каждом child есть поле и при клике по этому полю открывается tooltip описание. Если перекликать все филды, то пооткрываются все тултипы. Я хочу каким то образом сделать так, чтобы при клике по одному филду - кагисились все, ктоорые расположены в братских элементах.

<template>
    <div>
        <div @click="handleEvent($event)" @mouseleave="turnOffCommix">
            <slot></slot>
        </div>

        <div class="change-help"
             :class="{'change-help__no-bg': !showIcon}"
             :style="helpStyle"
             @click="handleEvent($event)"
        >
            <template v-if="showIcon">?</template>
            <div class="change-hint" :style="hintStyle">
                <p class="change-hint__text">
                    {{ msg }}
                </p>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    props: {
        showIcon: {
            default: true,
            type: Boolean
        },
        msg: {
            default: 'empty',
            type: String
        }
    },
    data () {
        return {
            showHelp: false
        };
    },
    methods: {
        handleEvent (event) {
            this.turnOnCommix();
        },
        turnOnCommix: function(){
            this.showHelp = true;
        },
        turnOffCommix: function(){
            this.showHelp = false;
        }
    },
    computed: {
        hintStyle: function () {
            return {opacity: this.showHelp ? 1 : 0};
        },
        helpStyle: function () {
            return {
                overflow: this.showHelp ? 'visible' : 'transparent'
            };
        }
    }
};
</script>


Думал в сторону событий ( this.$emit('turn-off') ). Но их вроде как правильно передавать наверх к родителям, а дети уже реактивно перегенерируют представление. И к тому же как понять в таком случае, что для текущего узла, где тултип всплыл - его тушить нельзя до нажатия по другому филду.
  • Вопрос задан
  • 233 просмотра
Решения вопроса 2
@PloAl
используйте ref
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега Vue.js
Пусть за видимость всплывающего сообщения отвечает не свойство, а параметр, значение которого будет назначаться в зависимости от равенства индекса текущего элемента индексу активного. При клике эмитите событие, в родительском компоненте это событие ловите, соответствующим образом изменяете индекс активного элемента. На всё про всё - пара строк. Как-то так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы