#javascript #vue.js
#javascript #vue.js
Вопрос:
У меня есть компонент, который предназначен для динамического отслеживания того, есть ли у элемента меню прикрепленное к нему подменю, что он успешно выполняет. Я настроил метод в экземпляре, чтобы переключать, показывать подменю или нет, но когда я нажимаю на него, ничего не происходит. В Vue devtools в разделе событий ничего не зарегистрировано. И поскольку событие click не запускается, я не получаю ожидаемого переключения «показать / скрыть».
Я пытался как можно тщательнее следить за документами Vue, но, несмотря на тот же синтаксис, у меня все еще нет успеха.
Вот мой компонент с одним файлом. Метод вызывается для двух значков font awesome с помощью @click.
<template>
<div class="subMenuCatcher">
<router-link class="routerLink" active-class="active" :to="menuItem.route" exact>
{{ menuItem.routeName }}
</router-link>
<i
class="fas fa-arrow-alt-circle-down icon"
:class="{ hidden: !subMenuHidden }"
@click="subMenuToggle"
></i>
<i
class="fas fa-arrow-alt-circle-up icon"
:class="{ hidden: subMenuHidden }"
@click="subMenuToggle"
></i>
<div
class="subMenu"
:class="{ hidden: subMenuHidden }"
v-for="(subMenuItem, index) in menuItem.subMenu"
:key="index"
>
<router-link class="routerLink" active-class="active" :to="subMenuItem.subRoute" exact>
{{ subMenuItem.subRouteName }}
</router-link>
</div>
</div>
</template>
<script>
const subMenuHidden = true;
export default {
props: {
'menu-item': Object,
},
data: function() {
return {
subMenuHidden,
};
},
methods: {
subMenuToggle: function() {
return !this.subMenuHidden;
},
},
};
</script>
<style scoped lang="scss">
.subMenuCatcher {
display: flex;
flex-flow: row nowrap;
justify-content: center;
margin: auto;
.subMenu {
display: flex;
flex-flow: column nowrap;
justify-content: center;
}
.routerLink {
text-decoration: none;
color: $routerLinkColor;
}
.active {
color: $activeColor;
}
.icon {
color: $routerLinkColor;
}
.hidden {
display: none;
}
}
</style>
В принципе, я ожидаю, что событие subMenuToggle сработает и изменит локальное состояние с subMenuHidden = false на true и обратно. То, что я получаю, вообще не является событием.
Комментарии:
1. События запускаются через
this.$emit()
, поэтому вы не должны видеть никаких событий. Простые действия / методы не зарегистрированы в devtools.2. Кроме того, у вас ошибка в
subMenuToggle()
, это должно быть:this.subMenuHidden != this.subMenuHidden
.3. в данный момент ваш метод возвращает логическое
Ответ №1:
В принципе, я ожидаю, что событие subMenuToggle сработает и изменит локальное состояние с subMenuHidden = false на true и обратно. То, что я получаю, вообще не является событием.
В данный момент вы возвращаете отрицание вашего subMenuHidden
значения, которое false
равно, но с самой переменной состояния ничего не происходит.
Измените свой метод переключения на: this.subMenuHidden = !this.subMenuHidden;
Комментарии:
1. Это было оно. Такая простая и элементарная ошибка. Спасибо, что заметили это.