代码之家  ›  专栏  ›  技术社区  ›  Robert Wildling

Vue路由器:循环路由以动态创建<router link>

  •  2
  • Robert Wildling  · 技术社区  · 7 年前

    我想把我的 routes 使用 v-for 为了生成 <router-link> 动态地 template 章节。

    目前我不知道如何解决 router param,定义于 main.js ,在 模板 我的部分 jvds-navigation.vue 组件。

    下面是脚本,我添加了注释,在这里我的问题发生了:

    主.js

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import App from './App.vue'
    
    // Import the routes file
    import { routes } from './router/routes.js'
    
    // Router
    Vue.use(VueRouter)
    const router = new VueRouter({
        routes,
        base: __dirname,
        mode: 'history'
    })
    
    new Vue({
        router, // short for "router: router"
        render: h => h(App),
    }).$mount('#app')
    

    应用程序.vue

    <template>
        <span id="app" class="o-root">
            <jvds-navigation class="..."></jvds-navigation>
            <router-view></router-view>
        </span>
    </template>
    
    <script>
    import JvdsNavigation from "@/components/layout/jvds-navigation.vue"
    
    export default {
    name: "App",
        components: {
            JvdsNavigation
        }
    };
    </script>
    

    jvds-navigation.vue公司

    <template>
    <div>
        <div class="[...]">
    
        <!-- 
            `nav` should have a `v-for` over the routes imported 
            in main.js (example given, but wrong). 
            But how can I address routes here?
        -->
    
        <nav class="[...]" v-for="routeItem in routes">
            <!-- These should be created dynamically... -->
            <router-link to="/about">
                <a>About</a>
            </router-link>
            <router-link to="/cv">
                <a>CV</a>
            </router-link>
            <router-link to="/contact">
                <a>Contact</a>
            </router-link>
      </nav>
      </div>
    </div>
    
    <script>
    // How do I get `routes` (imported in main.js) recognized by
    // this component in order to be able to loop over it in the
    // `template` section?
    export default {
      name: "jvds-navigation"
    };
    </script>
    

    谢谢你的任何提示,技巧和提示!

    1 回复  |  直到 7 年前
        1
  •  8
  •   Philip    7 年前

    使用 v-for router-link . 我用过 this.$router.options.routes 得到所有路线。你也可以把它作为道具传给 jvds-navigation .

    这是一个小例子,说明了如何做到这一点:

    模板

    <nav>
      <router-link v-for="route in routes" :key="route.path" :to="route.path">
        {{route.name}}
      </router-link>
    </nav>
    

    脚本

    export default {
      name: 'Navigation',
      data() {
        return {
          routes: this.$router.options.routes
        };
      }
      // or use computed
      // computed: {
      //   routes() {
      //     return this.$router.options.routes;
      //   }
      // }
    }
    
    推荐文章