Bootstrap 5 导航栏未在 Vue3 中切换

问题描述 投票:0回答:8

这是一个与如何使用 vue-router-links 制作导航栏项目以切换导航栏类似的问题?但我不允许在那里发表评论,并且给出的解决方案无论如何对我不起作用。

我正在使用 Vue 3 和 Bootstrap 5,以下代码的工作方式与标准 Bootstrap 代码的工作方式完全相同,即切换汉堡菜单打开和关闭菜单,但单击链接不会执行任何操作(除了正确路由到被单击的页面之外,这意味着用户然后必须再次点击汉堡菜单才能关闭)

导航栏组件:

    <template>
  <nav class="navbar navbar-dark bg-dark navbar-expand-sm">
    <div class="container-fluid">
        <router-link class="navbar-brand" to="/">Birch Farm</router-link> |
        <button class="navbar-toggler" type="button"  
          :class="visible ? null : 'collapsed'" 
          data-bs-toggle="collapse" 
          data-bs-target="#navContent" 
          aria-controls="navContent" 
          :aria-expanded="visible ? 'true' : 'false'"
          @click="visible = !visible" 
          aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navContent">
            <ul class="navbar-nav ms-auto mb-2 mb-lg-0">
              <li class="nav-item active">
                <router-link class="nav-link px-3" active-link="active" to="/" @click="visible = !visible">Home</router-link>
              </li>
              <li class="nav-item">
                <router-link class="nav-link px-3" to="/camping" @click="visible = !visible">Camping &amp; Caravanning</router-link>
              </li>       
              <li class="nav-item">
                <router-link class="nav-link px-3" to="/fishing" @click="visible = !visible">Cat Rough Fishery</router-link>
              </li>  
              <li class="nav-item">
                <router-link class="nav-link px-3" to="/contact" @click="visible = !visible">Contact Us</router-link>
              </li>  
            </ul>
        </div>
    </div>
  </nav>
</template>

<script setup>
  import {ref} from 'vue'
  const visible = ref(false);
</script>
<script>
export default {
  name: "NavBar",
  created() {},
  data() {},
  props: {},
  methods: {},
  components: {}
};
</script>

<style lang="scss" scoped></style>

没有任何“可见”的东西的工作方式完全相同 - 这是在尝试上面链接中给出的解决方案时添加的。

navbar vuejs3 bootstrap-5
8个回答
2
投票

“切换汉堡菜单会打开和关闭菜单,但单击链接不会执行任何操作(除了正确路由到所单击的页面之外)”

这就是 Bootstrap 导航栏的工作原理。单击链接后它不会自动折叠/隐藏。通常,您必须执行类似的操作才能在单击链接后关闭导航栏。

但是使用 Vue 时,您可以根据需要在

collapse
div 上使用
navbar-collapse
值切换
visible
类...

<div class="navbar-collapse" :class="!visible?'collapse':''" id="navContent">

演示:https://codeply.com/p/lHTzN4amfe


1
投票

我将

data-toggle
更改为
data-bs-toggle
,将
data-target
更改为
data-bs-target
,它成功了。

我的main.js(主入口文件)有这个

...
import "bootstrap/dist/css/bootstrap.min.css";
import "bootstrap";
...

0
投票

如果您通过 NPM 使用 bootstrap,则必须遵循 this 指南。据我所知,例如在 Angular 或 React 中使用它的方式是不同的。

除此之外,如果您想在项目中使用 bootstrap 并设置它,最简单的方法就是使用 CDN,我将向您展示如何操作:

在主布局中的

head
标签内,输入:

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

在你的

body
标签内,这个:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

0
投票

我遇到了同样的问题,bootstrap (5.1.3) 和 Vue (3.2.36)。所以我安装了 bootstrap-vue-3 (0.1.13) 并使用 和 使其工作。 另外,如果没有“navbar-light bg-light”,汉堡包图标一开始不会出现。 希望这有帮助。

<template>
<nav class="navbar navbar-expand-lg fixed-top navbar-light bg-light">
    <div class="container-fluid">
        <RouterLink class="navbar-brand" to="/">
            <img class="logo" src="../assets/svg/logo.svg" />
        </RouterLink>
        <b-button
            v-b-toggle.collapse-1
            variant="primary"
            class="navbar-toggler"
            type="button"
            data-bs-toggle="collapse"
            data-bs-target="#menuItems"
            aria-controls="menuItems"
            aria-expanded="false"
            aria-label="Toggle navigation"
        >
            <span class="navbar-toggler-icon"></span>
        </b-button>
        <b-collapse id="collapse-1" class="mt-2 collapse navbar-collapse">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <RouterLink class="nav-link" to=" /">home </RouterLink>
                </li>
                <li class="nav-item">
                    <RouterLink class="nav-link" to=" /something"
                        >something
                    </RouterLink>
                </li>
                <li class="nav-item">
                    <RouterLink class="nav-link" to="/about"
                        >about
                    </RouterLink>
                </li>
            </ul>
            <form class="d-flex">
                <input
                    class="form-control me-2"
                    type="search"
                    placeholder="Search"
                    aria-label="Search"
                />
                <button class="btn btn-outline-success" type="submit">
                    Search
                </button>
            </form>
        </b-collapse>
    </div>
</nav>

0
投票

我在 Vue 3 / Bootstrap 5 / vue-router 的另一个线程中发现了一个调整: 如何在点击时隐藏可折叠的 Bootstrap 导航栏

在菜单标签周围和 li / routerling 内部添加一个简单的 span 标签对我有用:

<div class="collapse navbar-collapse" id="navigation">
            <ul class="navbar-nav me-auto mb-2 mb-sm-0">
               <li class="nav-item">
                  <RouterLink class="nav-link" to="/"><span data-bs-target="#navigation" data-bs-toggle="collapse">Menu 1</span></RouterLink>
               </li>
               <li class="nav-item">
                  <RouterLink class="nav-link" to="/ventes.html"><span data-bs-target="#navigation" data-bs-toggle="collapse">Menu 2</span></RouterLink>
               </li>
</ul>

希望对你有帮助!


0
投票

我想分享我针对这个特定问题的解决方法/解决方案。

不要使用router-link组件,而是通过处理vue-router中的

click事件
,通过vue中的
push方法
手动触发导航。

这允许 HTML 的“静态”布局,以便您可以保留 Bootstap 中的功能,从而允许通过数据属性控制导航栏的折叠

为了触发活动导航样式,您可以使用

vue中的类绑定

vue-router中的route.name
值。它也适用于稍微修改的路径。

这是一个基本示例:

<script setup> import { useRouter, useRoute } from 'vue-router' const router = useRouter() const route = useRoute() const navigate = name => router.push({ name }) </script> <template> <div class="container"> <span class="navbar-brand">EXAMPLE NAVBAR</span> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="navbar-nav"> <li class="nav-item"> <span :class="['nav-link', route.name === 'camping' ? ' active' : '']" role="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" @click="navigate('camping')">CAMPING</span> </li> <li class="nav-item"> <span :class="['nav-link', route.name === 'fishing' ? ' active' : '']" role="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" @click="navigate('fishing')">FISHING</span> </li> </div> </div> </div> </template>
    

0
投票

<li class="nav-item mx-1"> <NuxtLink class="btn nav-button nav-text" to="/eventi"> <span data-bs-target="#navbarSupportedContent" data-bs-toggle="collapse">Servizi</span> </NuxtLink> </li>

我解决了在链接名称周围添加带有 data-bs-target="#navbarSupportedContent" 和 data-bs-toggle="collapse" 的 span 标签(在我的例子中它们是 NuxtLink,但我认为可以与 Router-link 一起使用) )


0
投票
我也有同样的问题。我通过添加解决了这个问题: 从“引导程序”导入*; 在 app.js 文件中。 之后,它就可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.