Angular 8 教程

2025 年 3 月 18 日 | 17 分钟阅读
Angular 8

Angular 社区发布了其最新版本,即 Angular 8。如果您熟悉以前的 Angular 版本,这并不会很困难。您可以轻松将 Angular CLI 升级到版本 8。

什么是 Angular 8?

Angular 8 是一个基于 TypeScript 的客户端框架,用于创建动态 Web 应用程序。它与以前的版本非常相似,但有一些扩展功能。

注意:动态 Web 应用程序就是动态网站,例如 www.gmail.comwww.yahoo.com 等,它们倾向于根据 3 个参数更改数据/信息

  • 时时刻刻(例如,新闻更新 Web 应用程序)
  • 地点到地点(例如,天气预报 Web 应用程序)
  • 用户到用户(例如,Gmail、Facebook 类型的应用程序)

您可以看到如何将 Angular CLI 升级到版本 8。 点击此处

Angular 8 的新功能

Angular 社区发布了其最新版本 Angular 8,其中包含一系列令人印象深刻的更改和改进,包括备受期待的 Ivy 编译器作为可选功能。

以下是 Angular 8 最突出的功能

  • Angular 8 支持 TypeScript 3.4
  • Angular 8 支持 Web Workers
  • Angular 8 的新编译器是 Ivy 渲染引擎
  • Angular 8 为懒加载模块提供动态导入。
  • ngUpgrade 的改进

TypeScript 3.4

Angular 8 支持 TypeScript 3.4,并且运行您的 Angular 8 项目需要它。因此,您必须将 TypeScript 版本升级到 3.4。

Web workers 类

JavaScript 是单线程的,因此更关键的任务(如数据调用)异步发生是很常见的。Web Workers 允许您在后台线程中运行 CPU 密集型计算,从而释放主线程来更新用户界面。

如果您的应用程序在处理数据时无响应,Web worker 也会有所帮助。

如果您想将此类计算外包到后台,我们必须首先使用 Angular CLI 创建 web worker。

关于 Ivy 和 Bazel 的更多信息

Ivy 是新的渲染引擎,Bazel 是新的构建系统。两者都已准备好与 Angular 8 正式使用。这两个的预览版应该很快就会发布。Ivy 是 Angular 的新编译器/运行时,Angular 8 是第一个提供正式选择加入 Ivy 的版本。

Ivy 预计将在 Angular 9 版本中成为默认渲染引擎。

Bazel 提供了 Angular 8 的最新功能之一,即能够更快地构建您的 CLI 应用程序。

Bazel 的主要优点是

  • 增量构建和测试。
  • 它提供了使用相同工具构建后端和前端的机会。
  • 它有可能在构建场上进行远程构建和缓存。

懒加载模块的动态导入

Angular 8 允许您对懒加载模块使用标准动态导入语法,而不是自定义字符串。

这意味着懒加载导入看起来像这样

将看起来像这样

改进的 Angular CLI 工作流

Angular CLI 正在不断改进。现在,ng build、ng test 和 ng run 已由第三方库和工具提供支持。例如,AngularFire 已经利用这些新功能,提供了 deploy 命令。

Angular 8 教程的先决条件

  • 您必须已安装 Node.js 版本 > 10。NPM 也将更新,因为它将默认使用。这里,我使用的是 Node 版本 12.4.0
  • 您必须在系统上安装了 MongoDB。您可以查看如何安装 MongoDB。点击此处...

Angular 8 教程的工作流

在这里,我们将创建两个独立的项目

一个用于前端 (Angular),一个用于后端 (Node.js | Express | MongoDB)。我们还将创建一个后端 API,供前端使用。

在这里,我们使用以下技术

  • Node: 12.4.0
  • Angular CLI: 8.0.2
  • NPM: v12.4.0
  • MongoDB shell 版本 v4.0.10
  • MongoDB 版本 v4.0.10
  • Windows 10

注意:您可以使用以下命令检查您的 node、angular、npm 和 mongoDB 版本

  • 要检查 Node 和 Angular CLI 版本,请使用 ng --version 命令。
  • 要检查 npm 版本,请使用 node -v 命令。
  • 要检查 MongoDB 版本,请使用 mongod --version 命令。
  • 要检查 MongoDB shell 版本,请使用 mongo --version 命令。

创建 Angular 8 项目

让我们使用以下命令创建一个 Angular 8 项目

这里,angular8project 是项目名称。

Angular 8

Angular 8

安装 Bootstrap 4 CSS 框架

使用以下命令在您的项目中安装 bootstrap。


Angular 8

现在,将以下代码添加到 angular.json 文件中。


Angular 8

上述 CSS 用于我们可以在任何文件中使用 bootstrap 类。

使用以下命令启动 Angular 开发服务器。


Angular 8

服务器在 https://:4200/ 启动

您可以看到输出。这是最初的 Angular 主屏幕。

Angular 8

项目描述

在这个项目中,我们将方便用户

  • 在表单中输入他们的产品名称、产品描述和产品价格并提交表单。
  • 根据值验证表单。如果值不正确,则会在前端进行验证,并且表单不会提交。
  • 如果所有值都正确,将表单发送到 Node.js 后端 API。
  • 将值存储在 MongoDB 数据库中。
  • 在前端显示数据。
  • 还方便用户编辑和删除数据。
  • 在 MongoD CLI 上显示数据。
  • 在 MongoDB Compass Community(MongoDB 数据库的 GUI。)上显示数据。

生成 Angular 组件

我们将进行 CRUD 操作来创建、读取和更新数据。因此,我们将创建三个组件。

使用以下命令生成 3 个 Angular 组件

注意:"spec" 命令在 Angular 8 中已弃用。您必须改用 "skipTests"。

Angular 8

所有上述 3 个组件都已自动添加到 app.module.ts 文件中。现在,我们必须在 app-routing.module.ts 文件中配置 angular 组件的路由。

您可以在项目文件中的 src >> app 文件夹中检查 app-routing.module.ts 文件。它是在我们安装 angular 应用程序时创建的,我们允许 angular cli 为我们生成路由文件。

现在,将以下代码写入 app-routing.module.ts 文件中

现在,您可以在 app.component.html 文件中看到 指令。此指令帮助我们根据路由 URI 渲染不同的组件。

创建 Angular 导航

将以下代码写入 app.component.html 文件中。

安装 Angular 路由进度指示器

键入以下命令安装 ng2-slim-loading-bar 库。

如果您现在安装了第三方包,那么它与 Angular 8 不兼容。为了解决 Angular 8 和第三方包之间的问题,您必须安装以下库。

现在,在 app.module.ts 文件中导入 SlimLoadingBarModule

现在,将库随附的样式包含在 src >> styles.css 文件中。

添加路由事件

Angular RouterModule 为我们提供了以下事件模块。

  • NavigationStart
  • NavigationEnd
  • NavigationError
  • NavigationCancel
  • 路由器
  • 事件

现在,将以下代码写入 app.component.ts 文件中。

在上面的代码中,我们已在 Angular 应用程序中指定,当用户从一个组件导航到另一个组件时,它将显示进度结果。

当用户点击其他路由时,Angular 进度指示器开始显示,当导航完成时,它将停止显示。因此,它对用户来说是一种用户体验。

上面的代码拦截路由事件并将加载条组件添加到每个路由,这样我们就可以在每次更改路由时看到路由指示。

我们必须在 app.component.html 文件的顶部添加 ng2-slim-loading-bar 指令

添加 Bootstrap 表单

将以下 Bootstrap 4 表单添加到 product-add.component.html 文件中。

打开本地主机浏览器并查看输出。它将看起来像下图所示。

Angular 8

添加 Angular 8 表单验证

在这里,我们使用响应式表单模块来为我们的表单添加验证。在 app.module.ts 文件中导入 ReactiveFormsModule

在这里,您需要注意,它不是模板驱动表单,因此您需要在 app.component.ts 文件中进行更改。

在这里,我们必须从 @angular/forms 导入 FormGroup、FormBuilder、Validators 模块,并创建一个构造函数并实例化 FormBuilder

因此,将以下代码写入 product-add.component.ts 文件中。

在这里,我们使用表单生成器来处理所有验证。现在,在该构造函数中,我们必须使用验证规则创建一个表单。在我们的示例中,有三个字段。如果输入文本为空,则会给出错误,并且我们需要显示该错误。

现在,将以下代码写入 product-add.component.html 文件中。

现在,您可以检查表单是否已验证。

Angular 8

配置 HttpClientModule

前端应用程序总是需要 HTTP 协议来与后端服务通信。现代浏览器支持两种不同的 API 来发出 HTTP 请求:javaHttpRequest 接口和 fetch() API。

在 app.module.ts 文件中导入 HttpClientModule。

创建模型文件

在 src >> app 文件夹中,创建一个名为 Product.ts 的文件并添加以下代码。

创建 Angular 服务文件

键入以下命令生成服务文件。

创建后,它将看起来像这样

现在,将 products.service.ts 文件导入到 app.module.ts 文件中。

将数据提交到节点服务器

现在,我们必须编写代码,将 HTTP POST 请求和数据发送到 Node.js 服务器,然后将数据保存到 MongoDB 数据库中。

将以下代码写入 products.service.ts 文件中。

注意:这里,我们定义了我们的后端 API URL,但我们还没有创建任何后端。让我们创建它。

现在,我们必须将 click 事件添加到“添加产品”按钮。因此,将以下代码添加到 product-add.component.html 文件中。

现在,将 addProduct() 函数添加到 product-add.component.ts 文件中。因此,将以下代码写入 product-add.component.ts 文件中。

创建 Node.js 后端 API

在 Angular 根文件夹中创建一个名为 api 的文件夹,然后进入该文件夹。这将是一个与您的 Angular 项目完全分离的项目。因此,它的 node_modules 文件夹与 Angular 项目不同。

在 api 文件夹中打开终端并键入以下命令。它将使用 NPM 生成 package.json 文件。


Angular 8

安装以下节点特定模块。


Angular 8

安装 nodemon server,它将方便您每次进行更改时无需启动节点服务器。它会自动重新启动 node.js 服务器。


Angular 8

现在,在 api 文件夹中,创建一个名为 server.js 的文件。将以下代码添加到 server.js 文件中。

Angular 8

现在,将 MongoDB 数据库与我们的 node express 应用程序连接起来。

如果您尚未安装 MongoDB 数据库,请安装它,然后使用以下命令启动 mongodb 服务器。

如何安装 MongoDB 点击此处...

现在,我们已连接到数据库。

在 api 根项目文件夹中创建一个名为 DB.js 的文件。将以下代码写入 DB.js 文件中。

将此 DB.js 文件导入到我们的 server.js 文件中,并使用 mongoose 库设置与 MongoDB 的数据库连接。将以下代码写入 server.js 文件以将我们的 MongoDB 应用程序连接到 Node.js 服务器。

保存此 server.js 文件,然后转到终端并使用以下命令启动节点服务器。

所以,现在有三个服务器正在运行

  • Angular 开发服务器
  • Node.js 服务器
  • MongoDB 服务器

Angular 服务器

Angular 8

Node.js 服务器

Angular 8

MongoDB 服务器

Angular 8

为您的应用程序创建模型和路由

现在,我们必须在 api 根文件夹中创建两个名为 routes 和 models 的文件夹。

让我们在 models 文件夹中创建一个名为 Product.js 的模型,其中包含以下代码。

在这里,我们定义了产品集合的 schema。我们有三个字段,名为 ProductNameProductDescriptionProductPrice

在 routes 文件夹中,创建一个名为 product.route.js 的文件。

将以下 CRUD 代码写入 product.route.js 文件中。

现在,我们已经在路由文件上设置了所有 CRUD 操作;我们需要在 server.js 文件中导入它。

因此,使用以下代码更新 server.js 文件

现在,如果尚未启动,请启动 node.js 服务器。如果它已经启动,那么让我们检查数据存储功能。

测试数据存储功能

现在,我们将输入一些数据来测试它是否正在存储。

Angular 8

首先,在第 4 个标签页中打开 mongo shell,因为其他三个标签页目前都被占用了。

使用以下命令打开 mongo shell


Angular 8

在这里,您可以使用

  • show dbs 命令查看数据库
  • 使用 database_name 命令使用数据库,并使用 db.collection_name.find() 查找查询。
Angular 8

注意:这里,我们使用了 db.collection_name.find().pretty() 命令仅美化结果。

查看数据库中存储项的替代方法

如果您喜欢 GUI,也可以使用 MongoDB Compass Community 查看数据库和条目。

Angular 8

在前端浏览器上显示数据

如果您想在前端浏览器上显示数据,请在 product-get.component.html 文件中写入以下代码。

现在,我们必须在 products.service.ts 文件中编写一个函数,该函数从 MongoDB 数据库中获取产品数据并在 Angular 应用程序中显示。

将此 products.service.ts 文件和 Product.ts 文件包含在 product-get.component.ts 文件中。

将以下代码写入 product-get.component.ts 文件中。

现在,保存文件,转到浏览器并切换到此 URL:https://:4200/products。您将看到以下结果。

Angular 8

现在,您已成功从数据库中获取数据并显示到浏览器。

编辑和更新数据

首先,我们需要从 MongoDB 数据库中获取 _id 对应的数据,然后将该数据显示在 product-edit.component.html 文件中。

将以下代码写入 product-edit.component.ts 文件中。

在这里,当 product-edit component.ts 渲染时,它将调用 ngOnInit 方法并向节点服务器发送 HTTP 请求,并从 _id 获取数据以显示在 product-edit component.html 文件中。

现在,在 products.service.ts 文件中,我们需要编写 editProduct 函数来发送 HTTP 请求。

最后,将表单写入 product-edit.component.html 文件中。

现在,使用以下代码更新 products.service.ts 文件中的数据,我们需要编写更新数据的函数。

现在,在 product-edit.component.ts 文件中写入 updateProduct() 函数

让我们检查编辑功能。在上面的读取操作中,我们看到有两个重复的 Radio 条目,如下所示

Angular 8

现在,我们将第二个 Radio 条目更改为 Stereo。

Angular 8

删除数据

这是 CRUD 操作的最后一步。我们目前已成功部署 CREATE、READ 和 UPDATE 操作。

因此,为了使 DELETE 操作成为可能,我们必须在 product-get.component.html 文件中的删除按钮上定义一个点击事件。

现在,我们必须在 product-get.component.ts 文件中编写 deleteProduct() 函数

最后,在 product.service.ts 文件中创建 deleteProduct() 函数。

DELETE 操作现已完成。让我们看看它是如何工作的。在这里,我们删除了我们首先编辑的第二个项目 Stereo。

Angular 8

您可以看到 Stereo 已被删除。您也可以在 MongoDB Compass Community GUI 上验证它。

Angular 8

Angular 8 教程索引