Bootstrap 5 Navbar折叠菜单无法展开的解决方案
Bootstrap5不再支持jQuery,需将data-toggle、data-target等属性改为data-bs-*前缀,移除jQuery依赖,确保折叠菜单ID唯一性,并正确加载bootstrap.bundle.min.js,即可解决Navbar折叠菜单无法展开的问题。
先确认一个关键前提:Bootstrap 5 已经彻底和 jQuery 说再见了,而且所有 data 属性的命名规则都换成了 data-bs-* 前缀——比如 data-bs-toggle ,不再是 Bootstrap 4 时代的 data-toggle。这个变化如果不跟上,折叠功能直接罢工,点击多少次都没用。
事实上,Bootstrap 5 对 JavaScript 组件的触发机制做了重构:所有交互式组件(像 Collapse、Dropdown、Modal 这类)都通过 data-bs-* 属性来声明式初始化,旧的 data- 写法(比如 data-toggle)已经完全不被支持了。而你当前的 HTML 还在沿用 Bootstrap 4 的语法,导致 navbar-toggler 点击后毫无反应——这恰恰是迁移过程中最容易遗漏的坑。
正确的 Bootstrap 5 写法
把所有的 data-toggle 和 data-target 换成对应的 data-bs-* 属性就能解决问题:
注意事项与优化建议
-
移除 jQuery:Bootstrap 5 自带的
bootstrap.bundle.min.js已经内置了 Popper(用于 Tooltip/Dropdown 的定位),完全不需要再引入 jQuery。记得从angular.json的scripts数组里删掉它:"scripts": [ "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" // 保留此项即可 // "node_modules/jquery/dist/jquery.min.js", ← 删除此行 ]
-
ID 唯一性校验:你的 HTML 里出现了两个
id="navbarNavAltMarkup"的元素(一个在左侧导航,一个在右侧认证按钮)。这在 HTML 规范里是不允许的,而且会导致data-bs-target的行为完全不可预测。建议给左右两部分分配不同的 ID,比如:同时别忘了同步更新
data-bs-target的值(比如#navbarNavLeft和#navbarNavRight)。确保样式与脚本加载顺序:确认
bootstrap.min.css在styles中前置加载,bootstrap.bundle.min.js在scripts中最后加载——Angular CLI 的默认配置是满足这个顺序的,但如果你手动调整过,需要检查一下。验证是否生效
打开浏览器开发者工具(F12)→ Elements 标签页,点击切换按钮后检查对应的
.collapse元素是否动态添加了show类。如果没有,再检查控制台是否有Uncaught ReferenceError: bootstrap is not defined报错——这个错误通常意味着bootstrap.bundle.min.js没有正确加载。完成以上修改后,小屏下的折叠菜单就能正常展开和收起啦,完全不需要再写任何额外的 JavaScript 初始化代码。
