JohnDaniels
@JohnDaniels

Как изменить data в компоненте vue.js?

Имеется два компонента - кнопка и меню, которое должно открываться по этой кнопке.

кнопка:
<template>
       <button type="button" class="navbar-toggle collapsed" @click="showLeftMenu">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
</template>

<script type="text/babel">
    export default{
        methods:{
            showLeftMenu(){
                this.$root.$emit('show')
            }
        }
    }
</script>


меню:
<template>
    <div class="sidemenu"  v-show="visible">
        {{visible}}
    </div>
</template>

<script type="text/babel">
    export default{
        data(){
            return{
                visible:  false
            }
        },
        created: function(){
           console.log(this.visible)
        },
        mounted(){
            this.$root.$on('show', function () {
                console.log('open!')
                this.visible = true;
                console.log(this.visible)
            })
        }
    }
</script>


клик по кнопке отлавливается в меню, в консоль выводится true, но v-show не срабатывает

be6f1140003c44ba8600872ec84a79b9.png

на странице ничего не меняется
07ad8f9179d04d6ba3a8c4f885c71238.png

что я упустил?
  • Вопрос задан
  • 2313 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
Потому что в функции коллбэке у вас контекст скорей всего неправильный.
mounted(){
            var vm = this;
            this.$root.$on('show', function () {
                console.log('open!')
                vm.visible = true;
                console.log(vm)
            })
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы