Нажмите кнопку, чтобы отобразить соответствующий DIV и скрыть остальные, используя Vue3

#javascript #vue.js #vuejs3

Вопрос:

Я приношу извинения, если вопрос кажется глупым. Я новичок в Vue.

У меня есть пара кнопок и пара дивов. Каждая кнопка при нажатии должна отображать соответствующий div, скрывая всех остальных.

Вот что я сделал

 <!-- Buttons -->
<div v-for="button in buttons" :key="button" @click="showBox(button.link)">
    {{ button.text }}
</div>

<!-- Boxes -->
<div id="about" :class="{ hidden: boxes.about.isHidden }">
    About me
</div>

<div id="resume" :class="{ hidden: boxes.resume.isHidden }">
    Resume
</div>

<div id="contact" :class="{ hidden: boxes.contact.isHidden }">
    Contact
</div>

<script>
    export default {
        components: {
        },
        props: {
        },
        data () {
            return {
                buttons: [
                    { text: 'About', link: 'about' }, 
                    { text: 'Resume', link: 'resume' },
                    { text: 'Contact', link: 'contact' },
                ],
                boxes: {
                    about: { isHidden: false },
                    resume: { isHidden: true },
                    contact: { isHidden: true },
                }
            }
        },
        methods: {
            showBox(box) {
                boxes.box.isHidden = false
            }
        }
    }
</script>
 

Как вы можете видеть, по умолчанию поле «О программе» отображается, но я не уверен, как продолжить отсюда.
Метод showBox() не работает, когда я помещаю переменную (поле) Я перешел от функции щелчка и разместил ее так. Я также не уверен, как мне лучше всего спрятать остальные коробки. Должен ли я перебирать объекты и устанавливать для всех isHidden значение true?

Буду признателен за любую помощь.

Комментарии:

1. this.boxes[box].isHidden = false (вы обращаетесь к буквальному box: дочернему элементу, которого не существует)

2. Большое спасибо @ChrisG, теперь это работает.

Ответ №1:

Вы можете получить доступ к данным с this помощью ключевого слова. Вам нужно исправить это с помощью this.boxes[box].isHidden = false