【问题标题】:How to add routes to my navigation in Vue?如何在 Vue 中为我的导航添加路线?
【发布时间】:2020-05-14 12:11:13
【问题描述】:

我在抽屉中有一个导航,它从数组中呈现标题,现在我希望能够单击并被重定向到另一个页面,但我无法解决这个问题,你能帮我弄清楚如何以正确的方式做到这一点?我正在使用 Vue。

这是我的导航栏:

<template>
  <nav>
    <v-app-bar prominent flat app style="background-color: white;">
      <div class="wrap row">
        <div class="hamburger col-lg-2">
          <v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
        </div>

        <div class="headerImg col-lg-8">
          <router-link to="/">
            <img class="image" :src="require('../img/eagle.jpg')" />
          </router-link>
        </div>
      </div>
    </v-app-bar>

    <v-navigation-drawer v-model="drawer" app temporary class="navigation">
      <div id="sidebar">
        <div class="SidebarHeader text-center">
          <router-link to="/">
            <div class="img"></div>
          </router-link>
        </div>



        <!-- PARENT -->

        <ul class="idb-nav list-unstyled m-15 p-0">
          <div v-for="(menu, index) in navigation.subnav" :key="index">
            <li class="nav-item" v-if="navigation.route && navigation.route.length">
              <a
                :class="[ 'nav-link', { 'active': menu.active } ]"
                href="javascript:void(0);"
                @click="toggleMenu(index)"
              >
                <i
                  v-if="item.subnav"
                  class="fas"
                  :class="{'fa-chevron-down' :!item.open, 'fa-chevron-up' :item.open}"
                ></i>
                <span class="menu-title">{{navigation.title}}</span>
              </a>

              <!-- CHILDREN -->

              <ul class="list-unstyled sub-menu">
                <router-link
                  tag="li"
                  v-for="(navigation, key) in navigation.subnav"
                  :key="key"
                  :to="subnav.route"
                >
                  <a href="javascript:void(0);" class="sub-menu-nav-link">
                    <span>{{subnav.title}}</span>
                  </a>
                </router-link>
              </ul>
            </li>
            <Dropdown v-if="item.subnav" :list="item" />
          </div>
        </ul>


      </div>
    </v-navigation-drawer>
  </nav>
</template>

<script>
import Dropdown from "./Dropdown";

export default {
  computed: {
    navigation() {
      return this.$store.getters.navigation;
    }
  },
  data() {
    return {
      drawer: false
    };
  },
  components: {
    Dropdown
  }
};
</script>

这是我的 index.js 文件:

import Vue from 'vue'
import Vuex from 'vuex'



Vue.use(Vuex)

export default new Vuex.Store({
  state: {

    navigation: [
      {
        title: "Historia",
        route: './views/Historia'
      },
      {
        title: "Elgitarrer",
        open: false,
        subnav: [
          {
            title: "Solid guitars",
            open: false,
            route: './views/Solid'
          },
          {
            title: "Semi solid guitars",
            open: false,
            route: './views/Semisolid'
          },
          {
            title: "Archtop guitars",
            open: false,
            route: './views/Archtop'
          },
          {
            title: "Thin archtop guitars",
            open: false,
            route: './views/Thinarchtop'
          },
        ]
      },
      {
        title: "Elbasar",
        open: false,
        subnav: [
          {
            title: "Kontrabas",
            open: false,
            route: './views/Kontrabas'
          },
          {
            title: "Bas",
            open: false,
            route: './views/Bas'
          },
        ]
      },
      {
        title: "Akustiskt",
        open: false,
        subnav: [
          {
            title: "Nylonsträngade",
            open: false,
            route: './views/Nylon'
          },
          {
            title: "Stålsträngade",
            open: false,
            route: './views/Steel'
          },
          {
            title: "Akustisk bas",
            open: false,
            route: './views/Akustiskbas'
          },
        ]
      },
      {
        title: "Övrigt",
        open: false,
        subnav: [
          {
            title: "Banjo/Mandolin",
            open: false,
            route: './views/BanjoMandolin'
          },
          {
            title: "Ukulele",
            open: false,
            route: './views/Ukulele'
          },
        ]
      },
      {
        title: "Kontakt",
        open: false,
        route: './views/Kontakt'
      },
    ],

  },
  getters: {
    navigation: state => {
      return state.navigation;
    }
  }
})

请帮帮我!

/丽莎

【问题讨论】:

  • 您似乎缺少 vue-router 路由定义?您基本上在 vuex 中定义了路由,但您需要在路由器中定义路由。但是,您可以在那里重新使用您的定义。 router.vuejs.org/guide/essentials/nested-routes.html 你用 vue-cli 设置你的项目了吗?那么你可能已经准备好文件了
  • 我推荐 The Net Ninja 在YouTube 上的优秀 Vue 教程,第 39 课以后处理路由。您需要一个 VueRouter 对象来实例化一组您将在 Vue 应用程序中使用的路由。
  • 嘿丽莎,请查看这个使用 vue 路由器的免费视频。 vueschool.io/courses/vue-router-for-everyone(约 1 小时)
  • 好的,但是如何在路由器中设置路由?我是 vue 的新手,我学习了很多教程和示例,但我也认为混合所有内容让我变得更难了。哈哈。

标签: vue.js routes navigation dropdown router


【解决方案1】:

您正在使用 vuex 进行路由,而不是使用 vue-router 插件。在 vue 文档中有一个章节是关于路由你的应用程序https://router.vuejs.org/guide/#javascript

【讨论】:

  • 谢谢,但是我必须卸载 vuex 才能使用 vue-router 插件吗?还是我保持原样?
【解决方案2】:

谢谢,但是我必须卸载 vuex 才能使用 vue-router 插件吗?还是我保持原样?

【讨论】:

    【解决方案3】:

    我认为您的问题在于您的router-link 循环:

    <router-link
      tag="li"
      v-for="(navigation, key) in navigation.subnav"
      :key="key"
      :to="subnav.route"
    >
      <a href="javascript:void(0);" class="sub-menu-nav-link">
        <span>{{subnav.title}}</span>
      </a>
    </router-link>
    

    您必须使用代表它的变量(在您的情况下为navigation)访问每个迭代。因此,它应该是这样的:

    <router-link
      tag="li"
      v-for="(navigation, key) in navigation.subnav"
      :key="key"
      :to="navigation.route"
    >
      <a href="javascript:void(0);" class="sub-menu-nav-link">
        <span>{{navigation.title}}</span>
      </a>
    </router-link>
    

    话虽如此,route 属性中表示的字符串(例如'./views/Archtop')在 vue-router 方面不是有效的路由路径,它看起来像是对组件本身的引用,应该在vue-router 实例中对应的路由对象。

    有关 vue-router 的更多信息,请参阅docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-26
      • 2021-05-19
      • 2020-11-21
      • 2018-11-06
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      相关资源
      最近更新 更多