我正在研究一个大学项目,并试图实现一项功能,当我单击其中的一个项目时,该功能将使导航抽屉关闭。但是,我不确定如何处理。
<template>
<div id="navigation-mobile">
<Searchbar class="search"/>
<ul v-for="item in tabs"
:key="item.path"
active-class
@click="$router.push(item.path)"
>
<li>{{item.name}}</li>
</ul>
<div class="mobile-footer">
<ul>
<li>About us</li>
<li>Contact us</li>
</ul>
</div>
</div>
</template>
这是我在App.vue中拥有的内容,其中包含导航抽屉的一部分:
<template>
<v-app id="app">
<NavBarMobile v-if="mobileView"/>
<div class="content" :class="{'open': showNav}">
<div style="height:20px"></div>
<div id="navigation-icon" v-if="mobileView"
@click="showNav = !showNav">
<v-icon medium dark>menu</v-icon>
</div>
<NavBar v-if="!mobileView"></NavBar>
<v-content class="pa-0" transition="slide-x-transition"></v-content>
<Footer v-if="!mobileView"></Footer>
<router-view></router-view>
</div>
</v-app>
</template>
到目前为止,这是我的代码。我想使用@click,我认为这是最有效的方法,但是我不知道是否可以,因为我已经在使用它。我不太擅长编程。有什么建议吗?
这是codepen:https://codesandbox.io/s/gameshelf-0209-jack-forked-zobe5
您可以在NavBarMobile.vue中找到该组件
提前感谢您抽出宝贵的时间阅读这篇文章!
答案 0 :(得分:3)
有几种方法可以实现这一目标。我认为,最简单的方法就是从您的$route
内部“观看” App.vue
对象:
export default {
// ...
watch: {
$route(to, from) {
this.showNav = false
}
}
}
Vue实例上的watch
属性包含将监视同名变量的更改的函数。更改后,该功能将运行。
有关观察者和计算属性的更多信息:https://vuejs.org/v2/guide/computed.html
编辑:有关对路由器更改做出反应的一些其他信息:https://router.vuejs.org/guide/essentials/dynamic-matching.html#reacting-to-params-changes
答案 1 :(得分:2)
另一种实现方法是通过从子组件发出事件。
<ul v-for="item in tabs" :key="item.path" active-class @click="redirect(item.path)">
methods: {
redirect(path) {
this.$router.push(path)
this.$emit('change', false)
}
},
<NavBarMobile v-if="mobileView" @change="showNav = $event"/>