单击项目后关闭导航抽屉吗?

时间:2020-09-03 12:24:16

标签: javascript vue.js vuetify.js

我正在研究一个大学项目,并试图实现一项功能,当我单击其中的一个项目时,该功能将使导航抽屉关闭。但是,我不确定如何处理。

    <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中找到该组件

提前感谢您抽出宝贵的时间阅读这篇文章!

2 个答案:

答案 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)

另一种实现方法是通过从子组件发出事件。

  • 首先将click事件指向处理逻辑的方法,如下所示:
<ul v-for="item in tabs" :key="item.path" active-class @click="redirect(item.path)">
  • 然后在脚本中添加一个方法,以从NavBarMobile组件发出自定义事件:
methods: {
        redirect(path) {
            this.$router.push(path)
            this.$emit('change', false)
        }
    },
  • 最后从父组件监听此事件:
<NavBarMobile v-if="mobileView" @change="showNav = $event"/>