在导航栏组件中结合 bootstrap-vue 和 vue-router

Posted

技术标签:

【中文标题】在导航栏组件中结合 bootstrap-vue 和 vue-router【英文标题】:Combining bootstrap-vue and vue-router inside navbar component 【发布时间】:2020-01-04 00:44:03 【问题描述】:

我正在尝试使用 bootstrap-vue 制作一个与 vue-router 一起使用的导航栏。导航栏运行正常,但是当我单击导航栏项目时,它不会将我路由到页面。在我合并 bootstrap-vue 之前,路由器正在工作,所以我猜我错过了一些与 bootstrap 相关的东西?有任何想法吗?

Navbar.vue

<template>
    <div>
        <b-navbar 
            toggleable="lg"
            type="light"
            variant="light"
        >
            <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
            <b-collapse id="nav-collapse" is-nav>
                <b-navbar-nav>
                    <b-link
                        active-class="active"
                        class="nav-link"
                        v-for="routes in links"
                        :key="routes.id"
                        :to="routes.path"
                    >
                        <b-nav-item>
                             routes.name 
                        </b-nav-item>
                    </b-link>
                </b-navbar-nav>
            </b-collapse>
        </b-navbar>

        <router-view></router-view>
    </div>
</template>

<script>

export default 
    name: 'Navbar',
    data() 
        return 
            links: [
                
                    id: 0,
                    name: 'Home',
                    path: '/',
                ,
                
                    id: 1,
                    name: 'RSVP',
                    path: '/RSVP',
                ,
                
                    id: 2,
                    name: 'Pictures',
                    path: '/pictures',
                ,
                
                    id: 3,
                    name: 'Contact',
                    path: '/contact',
                ,
            ],
        
    ,


</script>

路由器/index.js

import Vue from 'vue';
import router from 'vue-router';
import Home from '../components/Home';
import RSVP from '../components/RSVP';
import Pictures from '../components/Pictures';
import Contact from '../components/Contact';

Vue.use(router);

export default new router(
    routes: [
        
            path: '/',
            name: 'Home',
            component: Home
        ,
        
            path: '/RSVP',
            name: 'RSVP',
            component: RSVP
        ,
        
            path: '/pictures',
            name: 'Pictures',
            component: Pictures
        ,
        
            path: '/contact',
            name: 'Contact',
            component: Contact
        ,
    ],
    mode: 'history',
);

main.js:

import Vue from 'vue';
import App from './App';
import router from './router';
import BootstrapVue from 'bootstrap-vue'

Vue.use(router);
Vue.use(BootstrapVue);
Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue(
    el: '#app',
    router,
    components:  App ,
    template: '<App/>'
);

App.vue:

<template>
    <div id="app">
        <Navbar />
</div>
</template>

<script>

import Home from './components/Home';
import Navbar from './components/Navbar';
import RSVP from './components/RSVP';
import Contact from './components/Contact';
import Pictures from './components/Pictures';

export default 
    name: 'app',
    created () 
        document.title = "title";
    ,
    components: 
        Home,
        Navbar,
        RSVP,
        Contact,
        Pictures,
    ,


</script>

<style lang="css">

@import '../node_modules/bootstrap/dist/css/bootstrap.min.css';

</style>

【问题讨论】:

【参考方案1】:

根据b-navbar-nav 文档:

导航栏导航链接建立在 &lt;b-navbar-nav&gt; 父组件之上,并且需要使用和 &lt;b-nav-toggle&gt; 切换器来获得正确的响应式样式。导航栏中的导航也将占用尽可能多的水平空间,以保持导航栏内容安全对齐。

&lt;b-navbar-nav&gt; 支持以下组件:

&lt;b-nav-item&gt; 用于链接(和路由器链接)操作项

...

所以你的代码应该是这样的:

  <b-nav-item active-class="active" class="nav-link" v-for="routes in links" 
    :key="routes.id" :to="routes.path" >
    routes.name  
 </b-nav-item>      

【讨论】:

请此代码在其他页面中仍将活动添加到主页。请帮忙。 知道了...只需添加精确【参考方案2】:

还有更简单的方法:

<b-navbar-brand :to=" path: '/' ">To home</b-navbar-brand>

【讨论】:

以上是关于在导航栏组件中结合 bootstrap-vue 和 vue-router的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt/Vue/Bootstrap-vue 在滚动时收缩导航栏

如何将 bootstrap-vue 图标包含到 nuxtjs 中?导航栏向下箭头的问题

vuejs 中带有侧边栏的响应式导航栏( bootstrap 或 bootstrap-vue )

使用 bootstrap-vue 导航栏 item-dropdown 更改文本颜色

在 Nuxt 项目中自定义 bootstrap-vue

Laravel bootstrap-vue 不适用于导航崩溃