我正在使用 Angular 17 和 Bootstrap 5.3 开发一个 Web 应用程序,但我在使用 Bootstrap 的某些功能时遇到了问题。我正在关注文档 https://getbootstrap.com/docs/4.1/components/navbar/ 但我不知道为什么下拉菜单不起作用,即使我尝试了可能的解决方案。另外,导航栏中的右对齐也不起作用。除了这两个之外的所有 css 都可以工作。 我的 nav.component.html:
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
我使用 npm install --save 保存了 bootstrap、popper 和 jquery 文件。
角度.json:
"styles": [
"./node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/styles.css"
],
"scripts": [
"./node_modules/jquery/dist/jquery.min.js",
"./node_modules/bootstrap/dist/js/bootstrap.js"
],
然后我将链接放入我的 angular.json 文件中,但它不起作用。除了我提到的两个功能之外,只有其他 CSS 起作用。
之后,我将这些链接放入我的index.html文件中,但仍然不起作用。
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Intro</title>
<base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<!-- BootStrap CSS -->
<link
rel="stylesheet"
href= "../node_modules/bootstrap/dist/css/bootstrap.min.css"
/>
<!-- JQuery -->
<script src="../node_modules/jquery/dist/jquery.min.js"></script>
<!-- BootStrap JS -->
<script src="../node_modules/bootstrap/dist/js/bootstrap.js"></script>
</head>
<body>
<app-root></app-root>
</body>
</html>
然后,我将互联网上的链接放入我的 index.html 文件中,并且由于某种原因它起作用了。 像这样:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Intro</title>
<base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<!-- BootStrap CSS -->
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
/>
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- BootStrap JS -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<app-root></app-root>
</body>
</html>
但我知道我不应该这样放置它,而且我不明白为什么会这样。
问题一:
data-*
属性
您正在使用 Bootstrap 5 中不再支持的
data-*
属性。
所有 JavaScript 插件的数据属性现在都已命名,以帮助区分 Bootstrap 功能与第三方和您自己的代码。例如,我们使用
代替data-bs-toggle
。data-toggle
确保所有
data-*
属性都迁移到 data-bs-*
。
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#"
>Home <span class="sr-only">(current)</span></a
>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown"
role="button"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input
class="form-control mr-sm-2"
type="search"
placeholder="Search"
aria-label="Search"
/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">
Search
</button>
</form>
</div>
</nav>
问题2:对Popper.js的依赖
许多 Bootstrap 5 组件都依赖于 Popper.js。所以你必须导入 Popper.js (在导入 Bootstrap.js 文件之前)
"scripts": [
"./node_modules/@popperjs/core/dist/umd/popper.min.js",
"./node_modules/bootstrap/dist/js/bootstrap.min.js"
]
您也可以使用 Bootstrap Bundle。
"scripts": [
"./node_modules/bootstrap/dist/js/bootstrap.bundle.js"
],
请注意,不需要导入 jQuery,因为 Bootstrap 5 已删除了对其的依赖项。