所属分类:web前端开发
Angular 在过去几年中变得非常流行。您可以使用这个开源 JavaScript 框架来构建 Web 和移动应用程序。如果您一直在考虑学习 Angular 但不知道从哪里开始,那么遵循本系列可能是个好主意。
本系列的目的是涵盖 Angular 的基础知识,同时创建一个非常简单的应用程序来显示有关不同国家/地区的信息。 Angular 是用 TypeScript 编写的,因此您也可以用 TypeScript 编写自己的代码。
如果您已经熟悉 TypeScript,则可以继续开始创建您的第一个 Angular 应用程序。请记住,Angular 框架有两个主要版本。一个是AngularJS,即版本1,然后是Angular 2+,即版本2。不再支持AngularJS,两个版本之间有很多差异。
这是您必须问的第一个问题,答案是:这取决于情况。一些开发人员会认为 React 更好。但React也有问题! Angular 的优势在于它是一个集成框架,允许您构建项目而无需过多考虑库。
如果你想尝试 Angular,第一步是安装 Node.js。然后您可以前往官方网站并下载合适的版本。节点包管理器 npm 将作为 Node.js 的一部分安装。
下一步是通过运行以下命令来安装 TypeScript。如果您不熟悉 TypeScript,请不要担心。一点点 JavaScript 知识就足够了。简单来说,TypeScript 只是带有附加功能的类型化 JavaScript。许多现代编辑器对于帮助您掌握 TypeScript 很有用。我还在 Envato Tuts+ 上编写了一个名为 TypeScript for Beginners 的系列文章,您可以在其中首先学习 TypeScript 的基础知识。
npm install -g typescript
Angular 框架带有自己的命令行界面 (CLI)。 CLI 将为您处理大多数日常任务。这就是为什么您必须安装 CLI 才能启动 Angular。您可以通过运行以下命令来安装 Angular CLI。
npm install -g @angular/cli
现在,您可以通过在终端中运行以下命令来创建新的 Angular 应用程序。在运行命令之前,请确保您已移至要创建应用程序的目录。
ng new country-app
安装项目的所有依赖项需要一些时间,因此请在 Angular CLI 设置您的应用时耐心等待。安装完成后,您将在当前目录下看到一个名为 country-app
的文件夹。您可以立即运行您的应用,只需将目录更改为 country-app
,然后运行 ngserve
控制台。
cd country-app ng serve --open
添加 --open
将自动在浏览器中打开您的应用程序:https://localhost:4200/。
首次运行应用程序时,您将看到以下屏幕,无需对代码进行任何更改。那么刚刚发生了什么? Angular CLI 运行 Webpack 开发服务器。 Webpack Dev Server 在端口 4200
上呈现应用程序。它还监视项目源代码中的更改。每次更改时,代码都会重新编译,浏览器也会重新加载。由于您使用的是 Angular CLI,因此您已经在正确配置的开发环境中工作。因此,您无需执行任何操作,只需开始该项目即可。
我们正在创建的国家/地区信息应用程序将包含三个组件。 HomeComponent
将显示人口、GDP 和面积等各种类别下排名前三的国家。您将能够单击每个国家/地区的名称以了解有关该国家/地区的更多信息。有关国家/地区的附加信息是使用另一个组件列出的,我们将其称为 CountryDetailComponent
。我们的应用中还会有一个组件,它将用于显示我们存储在应用中的所有国家/地区的列表。
由于这是您的第一个 Angular 应用程序,因此我们的主要目标是让事情变得简单,而不添加任何复杂的功能。一旦您很好地掌握了基础知识,创建更复杂的应用程序似乎并不是一项艰巨的任务。
下图是我们国家信息应用中的主页或 HomeComponent
。正如您所看到的,每个类别下有三个国家,并且它们已按降序排列。在创建 HomeComponent
时,您将学习如何在模板中显示不同的国家/地区之前对它们进行排序。
下图显示了我们应用的“所有国家/地区页面”或 AllCountriesComponent
。该组件的布局与 HomeComponent
非常相似。唯一的区别是,这次我们列出了所有国家及其首都。
如果您点击 HomeComponent
或 AllCountriesComponent
内呈现的任何国家/地区的框,您将被带到国家/地区详细信息页面或 CountryDetailComponent
。所提供的有关国家/地区的信息不可编辑。
在每个国家/地区的详细信息之后,有一个后退按钮,可带您返回上一个组件或页面。如果您从 HomeComponent
来到 CountryDetailComponent
,您将被带回到 HomeComponent
。如果您从 AllCountriesComponent
到达 CountryDetailComponent
,您将被带回到 AllCountriesComponent
。
将我们创建的不同组件引用为页面在技术上是不正确的。然而,我交替使用像 homepage 或 HomeComponent
这样的术语,因为看到很多不熟悉的术语,比如路由、组件和装饰器,对于从未创建过 Angular 的读者来说可能会感到害怕。之前的应用程序。在本系列中宽松地使用这些术语可以帮助您快速学习,而不是被术语所困惑。
运行 ng new Country-app
命令后,Angular CLI 会为您创建一堆文件和文件夹。对于初学者来说,看到如此多的文件可能会令人生畏,但您不需要处理所有这些文件。创建国家/地区应用程序时,我们只会修改 src/app
文件夹中已存在的文件,并在同一目录中创建新文件。现在, src/app
文件夹中应该有五个不同的文件。这些文件创建一个应用程序 shell,用于将我们的应用程序的其余部分组合在一起。在 Angular 12 中,文件夹结构如下所示。
Angular 文件夹的结构方式很重要。良好的文件夹结构使代码维护变得简单、无缝。我们有一个很棒的免费课程来帮助您理解和实现更好的文件夹结构。
在我们开始创建应用程序之前,您需要熟悉 Angular 的基本概念。本节将非常简要地介绍组件和模板等重要主题。这篇文章的目标是帮助您习惯这些!
在 Angular 中,无论版本如何,您都有一些主要的构建块:
您可以在下面看到 Angular 12 架构的这些部分如何组合在一起:
自 Angular 2+ 以来,Angular 一直专注于维护模块化。这就是为什么我们有 Angular 模块,也称为 NgModules
。您创建的每个 Angular 应用程序都将至少有一个 Angular 模块:根模块。一般来说,这些被称为 AppModule
。首先,您的应用程序将只有根模块。随着时间的推移,您最终将创建多个模块来定义特定应用程序域的工作流程或功能。
记住,每个 Angular 模块都是一个包含 @NgModule
装饰器的类。
装饰器是为修改 JavaScript 中的类而编写的函数。装饰器用于将元数据链接到类。此元数据提供了有关类应如何工作以及应如何配置的详细信息。
以下是 AppModule
的元数据示例:
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
组件是 Angular 应用程序的构建块。它们允许您控制应用的用户界面。一个基本组件由两部分组成:装饰器和类定义。您可以为类内的组件指定应用程序逻辑。
组件装饰器用于指定诸如用于标识组件的自定义选择器、HTML 模板的路径以及要应用于组件的样式规则等信息。
这是一个设置所有三个值的基本组件装饰器:
@Component({ selector: 'app-country-detail', templateUrl: './country-detail.component.html', styleUrls: ['./country-detail.component.css'] })
我们创建的所有组件都将有一个自定义选择器,它指定在浏览器中呈现组件的标签。这些自定义标签可以具有您想要的任何名称。例如,我们将在本系列的第三个教程中创建一个 countryDetailComponent
,并且我们将使用我们自己的自定义标记,名为app-country-detail
在浏览器中呈现此组件。
这只是一个开始——我们还有 Angular 组件的深入指南。
模板是 Angular 组件的配套产品。简单来说,该模板只不过是一个 HTML 片段。它告诉我们应该如何渲染组件。在我们的 HomeComponent
中,模板如下所示。
<div class="container"> <h2>Three Most Populated Countries</h2> <div class="group"> <a *ngFor="let country of populatedCountries" class="country-unit" routerLink="/detail/{{country.name}}"> <div class="country-block"> <h4>{{country.name}}</h4> <p>{{country.population | number}}</p> <p>People</p> </div> </a> </div> <br> <h2>Three Largest Countries (Area)</h2> <div class="group"> <a *ngFor="let country of largestCountries" class="country-unit" routerLink="/detail/{{country.name}}"> <div class="country-block"> <h4>{{country.name}}</h4> <p>{{country.area | number}} km <sup>2</sup> </p> </div> </a> </div> <br> <h2>Countries with Highest GDP</h2> <div class="group"> <a *ngFor="let country of gdpCountries" class="country-unit" routerLink="/detail/{{country.name}}"> <div class="country-block"> <h4>{{country.name}}</h4> <p>{{country.gdp | number}} USD</p> </div> </a> </div> </div>
它是常规 HTML,但有一些差异。例如,我们使用 *ngFor
循环数组并在视图中渲染。
<a *ngFor="let country of populatedCountries" class="country-unit" routerLink="/detail/{{country.name}}"> <div class="country-block"> <h4>{{country.name}}</h4> <p>{{country.population | number}}</p> <p>People</p> </div> </a>
如果没有框架,只要用户响应操作或值,就应将数据值推送到 HTML 控件中。这种推或拉逻辑容易出错且乏味。最重要的是,手动处理这一切可能是一场噩梦。这就是 Angular 框架提供数据绑定的原因。
根据定义,数据绑定是一种协调模板和组件的机制。 DOM 和组件之间的整体控制流程如下所示:
当您进入国家/地区应用程序时,您将看到几个捕获按钮单击事件的位置,并且视图中的更改反映了业务逻辑。您将找到以下代码片段:
事件绑定的示例:
<button (click)="goBack()">Go Back</button>
属性绑定的示例:
<country-detail [country]="selectedCountry"></country-detail>
同样,他 app.component.ts 文件包含用 TypeScript 编写的组件的逻辑。您可以打开此文件并将 title
属性 AppComponent
类更新为“关于国家的有趣事实” '
. app.component.ts 文件现在应该包含以下代码。
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'Fun Facts About Countries'; }
app.component.html 文件包含我们的 AppComponent
类的模板。打开 app.component.html 文件并将其中的样板 HTML 代码替换为以下行:
<h1>{{title}}</h1>
通过将 title
放在大括号内,我们告诉 Angular 将 title
类的 AppComponent
属性的值放入h1
标签。
双向数据绑定是至关重要的部分,因为它将事件和属性绑定结合到一个符号中。这只不过是 ngModel
指令。这是双向数据绑定的简单示例。
<input [(ngModel)]="country.name" placeholder="name"/>
在双向绑定中,数据从具有属性绑定的组件流向输入框。当用户更改值时,数据通过事件绑定流回组件。在 Angular 中,所有数据绑定在每个 JavaScript 事件周期仅处理一次。
数据绑定在 Angular 表单中起着至关重要的作用。无论是反应式表单还是模板驱动表单,您都需要双向数据绑定。我们有一个教程,您可以在其中了解有关双向绑定和 Angular 表单的更多信息。
我们应用程序的不同组件需要检索数据以在屏幕上显示。我们将创建一个服务类,其中包含帮助我们检索此数据并以某种方式对其进行排序或修改的功能。然后,我们将使用不同组件类的功能向用户显示这些数据。
您可以将 Service
视为您的应用程序所需的任何值、函数或功能。获取存储在我们的应用程序中的所有国家/地区是一项服务,对它们进行排序和显示也是一项服务。我们类中的所有三个组件都将使用我们服务中的函数来检索数据。
这是我们将要创建的 服务和依赖注入是 Angular 框架中的关键主题。当您构建国家/地区应用程序时,在我们即将推出的教程中,您将了解它们的重要性。如果您想了解 Angular 服务的所有内部结构,请查看我们的 Angular 服务初学者指南。 对此文件所做的更改将自动反映在浏览器中:http://localhost:4200/。只需确保控制台仍处于打开状态,并且您已经在教程开头输入了 应用程序的不同功能和特性将由我们稍后创建的多个更简单的组件控制。您可以将此应用程序 shell 视为一辆汽车,以及我们将创建的不同组件作为该汽车的一部分,例如发动机和车轮。每个组件都会执行特定的功能,您可以将它们组合在一起来创建整个汽车。 本教程的目的是帮助您安装创建 Angular 应用程序所需的所有必要工具,并快速了解一些基本的 Angular 概念。 总而言之,您需要先了解 TypeScript 的基础知识,然后才能创建 Angular 应用。然后您需要安装 Node.js、TypeScript 和 Angular CLI。之后,您只需运行本教程的入门部分中的 npm 命令,您的第一个 Angular 应用程序就会启动并运行。 我们的国家/地区应用程序将不仅仅显示标题。在下一个教程中,您将创建一些类和服务,用于存储和检索有关不同国家/地区的数据。这些类和服务将在第三和第四教程中有用,我们将在其中创建应用程序的不同组件。 这篇文章已根据 Divya Dev 的贡献进行了更新。 Divya 是一位拥有超过 5 年经验的前端开发人员。她是安娜大学的毕业生和金牌获得者。country-app
的代码片段。如您所见,我们正在从 组件
和 OnInit
">@Angular/core。同样,我们从我们自己创建的文件中导入 Country
和 CountryService
。 p>
import { Component, OnInit } from '@angular/core';
import { Country } from '../country';
import { CountryService } from '../country.service';
运行应用程序
ngserve
命令。 最终想法