• Angular 17+:使用最新的 Standalone Components 和 Signals 架构。
  • Bootstrap 5:作为主要的 UI 框架和样式库。
  • TypeScript:提供类型安全。
  • Modern Angular CLI:用于项目构建和管理。
  • 响应式设计:确保在所有设备上都有良好的体验。
  • 模块化结构:代码清晰、易于维护。

我们将创建一个包含以下常见模块的单页应用:

bootstrap angular 模板
(图片来源网络,侵删)
  1. 导航栏:固定在顶部,包含品牌 Logo、导航链接和一个搜索框。
  2. 英雄区域:一个全屏宽度的横幅,带有引人注目的标题和行动号召按钮。
  3. 特性展示:三个并排的卡片,展示产品或服务的核心特性。
  4. 内容展示:一个带有图片和描述的图文混排区域。
  5. 页脚:包含版权信息和链接。

第 1 步:创建新的 Angular 项目

确保你已经安装了 Node.js 和 Angular CLI。

打开你的终端,运行以下命令来创建一个新的 Angular 项目:

# 创建一个名为 ng-bootstrap-template 的新项目
# --standalone 表示使用独立组件,这是 Angular 17+ 的推荐方式
# --style=css 表示使用 CSS 预处理器
ng new ng-bootstrap-template --standalone --style=css

当提示你是否添加 Angular 路由时,选择 No (因为我们现在先做一个单页应用,稍后可以轻松添加路由),进入项目目录:

cd ng-bootstrap-template

第 2 步:安装 Bootstrap

我们将通过 npm 来安装 Bootstrap 和它的 JavaScript 依赖(Popper.js 是 Bootstrap 5 所需的)。

bootstrap angular 模板
(图片来源网络,侵删)
npm install bootstrap@next

第 3 步:引入 Bootstrap 样式

为了让 Angular 项目能够使用 Bootstrap 的 CSS,我们需要在项目的全局样式文件中导入它。

打开 src/styles.css 文件,并在文件顶部添加以下行:

/* src/styles.css */
/* 导入 Bootstrap 的 CSS */
@import '~bootstrap/dist/css/bootstrap.min.css';
/* 你可以在这里添加你自己的全局样式 */
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

第 4 步:创建和配置组件

我们将按照模块化的方式创建所需的组件。

创建共享组件

这些组件(如 Navbar, Footer)可能会在多个页面重复使用,所以我们将它们放在一个 shared 目录下。

bootstrap angular 模板
(图片来源网络,侵删)
# 创建共享模块目录和组件
ng g c components/shared/navbar --standalone
ng g c components/shared/footer --standalone

创建页面级组件

放在一个 home 组件中。

# 创建主页组件
ng g c components/home/home --standalone

第 5 步:编写组件模板和逻辑

让我们为每个组件添加 HTML 模板和必要的逻辑。

NavbarComponent

打开 src/app/components/shared/navbar/navbar.component.html 并替换其内容:

<!-- src/app/components/shared/navbar/navbar.component.html -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
  <div class="container">
    <a class="navbar-brand" href="#">Ng-Bootstrap</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav me-auto">
        <li class="nav-item">
          <a class="nav-link active" href="#">首页</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">lt;/a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">服务</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">联系我们</a>
        </li>
      </ul>
      <form class="d-flex">
        <input class="form-control me-2" type="search" placeholder="搜索" aria-label="Search">
        <button class="btn btn-outline-success" type="submit">搜索</button>
      </form>
    </div>
  </div>
</nav>

FooterComponent

打开 src/app/components/shared/footer/footer.component.html 并替换其内容:

<!-- src/app/components/shared/footer/footer.component.html -->
<footer class="bg-dark text-white py-4 mt-5">
  <div class="container text-center">
    <p>&copy; 2025 Ng-Bootstrap 模板. 保留所有权利.</p>
    <a href="#" class="text-white me-3">隐私政策</a>
    <a href="#" class="text-white">使用条款</a>
  </div>
</footer>

HomeComponent

这是最复杂的部分,包含了英雄区域、特性和内容展示。

打开 src/app/components/home/home.component.html 并替换其内容:

<!-- src/app/components/home/home.component.html -->
<div class="container mt-5 pt-5">
  <!-- 英雄区域 -->
  <section class="jumbotron text-center py-5">
    <h1 class="display-4">欢迎使用 Ng-Bootstrap 模板</h1>
    <p class="lead">这是一个使用 Angular 和 Bootstrap 5 构建的现代化网站模板,它响应迅速,易于定制。</p>
    <a class="btn btn-primary btn-lg" href="#" role="button">了解更多</a>
  </section>
  <!-- 特性展示 -->
  <section class="my-5">
    <h2 class="text-center mb-4">核心特性</h2>
    <div class="row">
      <div class="col-lg-4 col-md-6 mb-4">
        <div class="card h-100">
          <div class="card-body">
            <h5 class="card-title">快速开发</h5>
            <p class="card-text">利用 Angular 的强大功能和 Bootstrap 的丰富组件,可以快速构建美观且功能强大的 Web 应用。</p>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 mb-4">
        <div class="card h-100">
          <div class="card-body">
            <h5 class="card-title">响应式设计</h5>
            <p class="card-text">模板默认采用响应式布局,能够完美适配桌面、平板和手机等各种屏幕尺寸。</p>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 mb-4">
        <div class="card h-100">
          <div class="card-body">
            <h5 class="card-title">易于维护</h5>
            <p class="card-text">采用 Angular 的模块化组件结构,代码组织清晰,便于后续的功能扩展和维护。</p>
          </div>
        </div>
      </div>
    </div>
  </section>
  <!-- 内容展示 -->
  <section class="my-5">
    <div class="row align-items-center">
      <div class="col-lg-6">
        <img src="https://via.placeholder.com/600x400.png/007bff/ffffff?text=Angular+Bootstrap" class="img-fluid rounded shadow" alt="Angular and Bootstrap">
      </div>
      <div class="col-lg-6">
        <h2>关于我们</h2>
        <p>我们是一支专注于现代 Web 技术的开发团队,我们相信,通过使用像 Angular 和 Bootstrap 这样的优秀工具,可以为用户带来最佳的体验。</p>
        <p>这个模板是我们理念的体现,它不仅美观,而且注重性能和可访问性。</p>
        <a class="btn btn-outline-primary" href="#">了解更多</a>
      </div>
    </div>
  </section>
</div>

第 6 步:组合所有组件

我们需要在主应用组件 (AppComponent) 中将所有部分组合起来。

打开 src/app/app.component.html,并替换其内容为:

<!-- src/app/app.component.html -->
<app-navbar></app-navbar>
<main>
  <app-home></app-home>
</main>
<app-footer></app-footer>

注意:由于 Navbarfixed-top会覆盖在页面内容上,我们需要给 <main> 元素添加一些上内边距来避免被遮挡,打开 src/app/app.component.css 并添加:

/* src/app/app.component.css */
main {
  padding-top: 76px; /* 根据你的 navbar 高度进行调整 */
}

第 7 步:在 app.config.ts 中提供组件

因为我们是使用独立组件,所以需要告诉 Angular 应用在哪些地方可以找到这些组件。

打开 src/app/app.config.ts 文件,并修改如下:

// src/app/app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
// 导入你创建的组件
import { NavbarComponent } from './components/shared/navbar/navbar.component';
import { FooterComponent } from './components/shared/footer/footer.component';
import { HomeComponent } from './components/home/home.component';
// 如果你以后添加路由,请在这里导入
// import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
  providers: [
    provideRouter([]), // 现在没有路由,所以是空数组
    // 提供所有需要使用的独立组件
    provideComponentScoped(NavbarComponent),
    provideComponentScoped(FooterComponent),
    provideComponentScoped(HomeComponent),
  ],
};

第 8 步:运行项目

一切准备就绪!回到你的终端,运行开发服务器:

ng serve -o

-o 参数会自动在浏览器中打开你的应用,你应该能看到一个完整的、带有 Bootstrap 样式的网站了。


总结与进阶

你已经成功创建了一个功能齐全的 Angular + Bootstrap 模板!

从哪里可以继续发展?

  1. 添加路由:将 HomeComponent 和其他页面(如 AboutComponent, ContactComponent)通过 Angular Router 连接起来,创建一个多页应用。
  2. 使用 Angular Bootstrap 组件:除了使用 Bootstrap 的 CSS,你还可以安装 ngx-bootstrap 库来获得封装好的 Angular 组件(如模态框、日期选择器、下拉菜单等),它们能更好地与 Angular 的生命周期集成。
  3. 集成后端:使用 HttpClient 从你的后端 API 获取数据,并动态渲染到页面上。
  4. 添加状态管理:对于复杂的应用,可以考虑使用 NgRx 或 Signals 来管理应用的全局状态。
  5. 优化和部署:使用 ng build 构建生产版本,并部署到 Netlify、Vercel 或任何其他静态网站托管服务上。

这个模板为你提供了一个坚实的基础,你可以基于它构建任何你想要的 Web 应用。