将项目向右对齐,导航栏下拉菜单不适用于 Angular 17 和 Bootstrap 5.3

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

我正在使用 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>

但我知道我不应该这样放置它,而且我不明白为什么会这样。

html css angular bootstrap-5
1个回答
0
投票

问题一:

data-*
属性

您正在使用 Bootstrap 5 中不再支持的

data-*
属性。

Bootstrap 5 迁移

所有 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 已删除了对其的依赖项

演示@StackBlitz

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