学习Angular的编程之旅

目录

1、简介

2、特点

2.1 横跨多种平台

2.2 速度与性能

2.3 美妙的工具

3、Angular 应用:知识要点

3.1 组件

3.2 模板

3.3 依赖注入

4、与其他框架的对比


1、简介

Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用。

Angular 是一个基于TypeScript
构建的开发平台。它包括:

  • 一个基于组件的框架,用于构建可伸缩的 Web 应用

  • 一组完美集成的库,涵盖各种功能,包括路由、表单管理、客户端-服务器通信等

  • 一套开发工具,可帮助你开发、构建、测试和更新代码

借助 Angular,无论单人项目还是企业级应用,你都能获得平台带来的优势。Angular 的设计目标之一就是让更新更容易,因此你可以用最小的成本升级到最新的 Angular 版本。最重要的是,Angular 的生态系统由包括 170 万名开发人员、库作者和内容创作者在内的多元团队构成。

2、特点

2.1 横跨多种平台

学会用 Angular 构建应用,然后把这些代码和能力复用在多种多种不同平台的应用上 —— Web、移动 Web、移动应用、原生应用和桌面原生应用。

2.2 速度与性能

通过 Web Worker 和服务端渲染,达到在如今(以及未来)的 Web 平台上所能达到的最高速度。

Angular 让你有效掌控可伸缩性。

基于 RxJS、Immutable.js 和其它推送模型,能适应海量数据需求。

2.3 美妙的工具

使用简单的声明式模板,快速实现各种特性。使用自定义组件和大量现有组件,扩展模板语言。在几乎所有的 IDE 中获得针对 Angular 的即时帮助和反馈。所有这一切,都是为了帮助你编写漂亮的应用,而不是绞尽脑汁的让代码“能用”。

3、Angular 应用:知识要点

3.1 组件

组件是构成应用的模块。组件包括三个部分:带有 @Component() 装饰器的 TypeScript 类、HTML 模板和样式文件。@Component() 装饰器会指定如下 Angular 专属信息:

  • 一个 CSS 选择器,用于定义如何在模板中使用组件。模板中与此选择器匹配的 HTML 元素将成为该组件的实例。

  • 一个 HTML 模板,用于指示 Angular 如何渲染此组件

  • 一组可选的 CSS 样式,用于定义模板中 HTML 元素的外观

下面是一个最小化的 Angular 组件。

import { Component } from '@angular/core';@Component({selector: 'hello-world',template: `<h2>Hello World</h2><p>This is my first component!</p>`
})
export class HelloWorldComponent {// 组件相关属性、方法等。
}

要使用此组件,请在模板中编写以下内容:

<hello-world></hello-world>

当 Angular 渲染此组件时,生成的 DOM 如下所示:

<hello-world><h2>Hello World</h2><p>This is my first component!</p>
</hello-world>

Angular 的组件模型提供了强大的封装能力和直观的应用结构。组件还能让你的应用更容易进行单元测试,并可以提高代码的整体可读性。

3.2 模板

每个组件都有一个 HTML 模板,用于声明该组件的渲染方式。你可以内联它或用文件路径定义此模板。

Angular 添加了一些语法元素以扩展 HTML,让你可以从组件中插入动态值。当组件的状态更改时,Angular 会自动更新已渲染的 DOM。此功能的应用之一是插入动态文本,如下例子所示。

<p>{{ message }}</p>

这里 message 的值来自组件类:

import { Component } from '@angular/core';@Component ({selector: 'hello-world-interpolation',templateUrl: './hello-world-interpolation.component.html'
})
export class HelloWorldInterpolationComponent {message = 'Hello, World!';
}

当应用加载组件及其模板时,用户将看到以下内容:

<p>Hello, World!</p>

注意这里所用的双花括号 —— 它们指示 Angular 对其中的内容进行插值。

Angular 还支持属性绑定,以帮助你设置 HTML 元素的 Property 和 Attribute 的值,并将这些值传给应用的展示逻辑。

<p[id]="sayHelloId"[style.color]="fontColor">You can set my color in the component!
</p>

注意这里所用的方括号 —— 该语法表明你正在将 Property 或 Attribute 绑定到组件类中的值。

可以声明事件监听器来监听并响应用户的操作,比如按键、鼠标移动、单击和触摸等。你可以通过在圆括号中指定事件名称来声明一个事件监听器:

<buttontype="button"[disabled]="canClick"(click)="sayMessage()">Trigger alert message
</button>

前面的例子中调用了一个方法,该方法是在组件类中定义的:

sayMessage() {alert(this.message);
}

以下是在 Angular 模板中插值和绑定的例子:

import { Component } from '@angular/core';@Component ({selector: 'hello-world-bindings',templateUrl: './hello-world-bindings.component.html'
})
export class HelloWorldBindingsComponent {fontColor = 'blue';sayHelloId = 1;canClick = false;message = 'Hello, World';sayMessage() {alert(this.message);}
}
<buttontype="button"[disabled]="canClick"(click)="sayMessage()">Trigger alert message
</button><p[id]="sayHelloId"[style.color]="fontColor">You can set my color in the component!
</p><p>My color is {{ fontColor }}</p>

可以用指令来为模板添加额外功能。Angular 中最常用的指令是 *ngIf 和 *ngFor。你可以使用指令执行各种任务,比如动态修改 DOM 结构。你还可以用自定义指令来创建出色的用户体验。

以下代码是 *ngIf 指令的例子。

import { Component } from '@angular/core';@Component({selector: 'hello-world-ngif',templateUrl: './hello-world-ngif.component.html'
})
export class HelloWorldNgIfComponent {message = "I'm read only!";canEdit = false;onEditClick() {this.canEdit = !this.canEdit;if (this.canEdit) {this.message = 'You can edit me!';} else {this.message = "I'm read only!";}}
}
<h2>Hello World: ngIf!</h2><button type="button" (click)="onEditClick()">Make text editable!</button><div *ngIf="canEdit; else noEdit"><p>You can edit the following paragraph.</p>
</div><ng-template #noEdit><p>The following paragraph is read only. Try clicking the button!</p>
</ng-template><p [contentEditable]="canEdit">{{ message }}</p>

Angular 的声明式模板使让可以将应用的逻辑和外观完全分开。模板基于标准 HTML,因此易于构建、维护和更新。

3.3 依赖注入

依赖注入让你可以声明 TypeScript 类的依赖项,而无需操心如何实例化它们,Angular 会为你处理这些琐事。这种设计模式能让你写出更加可测试、也更灵活的代码。尽管了解依赖注入对于开始用 Angular 并不是至关重要的事,但我们还是强烈建议你将其作为最佳实践,并且 Angular 自身的方方面面都在一定程度上利用了它。

为了说明依赖注入的工作原理,请考虑以下例子。第一个文件 logger.service.ts 中定义了一个 Logger 类。它包含一个 writeCount 函数,该函数将一个数字记录到控制台。

import { Injectable } from '@angular/core';@Injectable({providedIn: 'root'})
export class Logger {writeCount(count: number) {console.warn(count);}
}

接下来,hello-world-di.component.ts 文件中定义了一个 Angular 组件。该组件包含一个按钮,它会使用此 Logger 类的 writeCount 函数。要访问此功能,可通过向构造函数中添加 private logger: Logger 来把 Logger 服务注入到 HelloWorldDI 类中。

import { Component } from '@angular/core';
import { Logger } from '../logger.service';@Component({selector: 'hello-world-di',templateUrl: './hello-world-di.component.html'
})
export class HelloWorldDependencyInjectionComponent  {count = 0;constructor(private logger: Logger) { }onLogMe() {this.logger.writeCount(this.count);this.count++;}
}

4、与其他框架的对比

通过上面的一个基本示例,我们可以看出Angular 与当下流行其他的框架(Vue,React)一些差别,当然对比这些框架每个人观点都不一样,都有各自的自己的喜好,所有在实际项目开发过程中选择适合的才是最好的。以下是我自己使用这几个框架的一些感受。

首先,说下Angular 框架,Angular 框架有点像java开发中的框架,例如,之前进行企业级开发的SSH,框架整体上是比较成熟的,性能,稳定性,安全性方面都做的比较好,项目中的一些实现也尽可能的参考现有标准来进行实现。项目的生态,社区也比较大,项目中有整个一套的解决方案,Angular框架的背后是谷歌,整体各方面感受还是不错,一般金融机构,银行之类的前端大多会选择Angular框架,缺点就是相对于Vue,React来说上手难度要高一下,主要是Angular框架的一些理念都来自后端,比如依赖注入之类。

其次,说下Vue框架,Vue 是一个开源的 Model-View-View-Model (MVVM) 前端 JavaScript 库。它被称为渐进式框架,Vue框架上手难度是这几个框架中难度最小的一个,一般在小公司,或者一些小型项目中优先选择的是Vue框架。Vue框架类似于是HTML包裹着相关的一些逻辑代码的实现,缺点是写起来受限于模块,不够灵活,优点是快捷,方便,上手非常快。

最后,说下React框架,React框架主要一个UI库,不像Angular那样提供一整套对应的解决方案,这样使用起来更灵活,可以选择对应的库一起来使用,例如,react+redux、MobX 或其它 flux 模式的状态管理库一起使用时,使其成为一套强大的解决方案,React框架类似于是javascript包裹的html相关的一些东西,这样写起来更灵活,自定义起来会更方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13103.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm对象创建和内存分配优化

一、创建对象过程 1、类加载检测 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。 …

Flask学习笔记(2)应用部署

本文将介绍如何部署Flask应用。   部署Flask应用&#xff0c;主要是要运用多线程与多进程&#xff0c;提高接口的并发能力。我们以下面的Python代码&#xff08;server.py&#xff09;为例进行演示&#xff1a; # -*- coding: utf-8 -*- import time import datetime from f…

密码学学习笔记(五):Hash Functions - 哈希函数1

简介 什么是密码学中的哈希函数&#xff1f; 哈希函数是一种快速算法&#xff0c;它接受任何长度的输入&#xff0c;并产生一个固定长度的随机输出&#xff0c;称为摘要(digest)&#xff0c;比如&#xff1a; MD4, MD5: 128-bit output (broken) •SHA-1: 160-bit output (b…

基于redhat发行版mysql8.0的卸载与重装mysql5.7

文章目录 一、软件的选择与下载二、卸载mysql8.01.查看my.cnf中的部署信息2.卸载mysql8.03.卸载完毕安装包后删除相关数据 三、mysql5.7的安装1.解压安装包2.初始化mysql数据库3.修改root密码 四、安装mysql5.7客户端附&#xff1a;创建数据库以及用户 本次案例是卸载mysql8.0然…

2个好用的ftp和ssh工具推介

为什么不用xshell和xftp,是不好用吗&#xff1f;xshell和xftp虽然好用&#xff0c;而且也有免费版&#xff0c;但是&#xff0c;一个方面使用有限制&#xff0c;再就是你看见这个报错的弹窗烦不烦&#xff1f; 一、ssh工具-WindTerm WindTerm[1] 是一个基于 C 开发的开源终端模…

使用大型语言模(LLM)构建系统(七):评估1

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。之前我们已经学习了下面这些知识&#xff1a; 使用大型语言模(LLM)构建系统(一)&#xff1a;分类使用大型语言模(LLM)构建系统(二):内容审核、…

3d渲染画面变形怎么办?

在用3dmax渲染图片时有时会遇到画面变形的情况&#xff0c;这个是什么原因呢&#xff1f;今天我们就来看看吧。 首先我们来看下变形的具体情况&#xff0c;再分析原因。可以看到整个画面都畸变了&#xff0c;呈现出上下拉伸的情况&#xff0c;能造成这个效果的&#xff0c;只有…

error: exportArchive: No signing certificate \“Mac Development\“ found

error: exportArchive: No signing certificate “Mac Development” found UNIAPP打包又遇到这个问题了, 证书过期续期的时候又遇到这个问题了(之前遇到过解决了,时间长忘了),记录一下,报错信息 error: exportArchive: No signing certificate \"Mac Development\"…

【毕业设计】爱琴海——基于HTML5的婚庆用品商城网页设计

一、内容简介 (一)背景与意义 “婚俗”是指结婚的风俗&#xff0c;各国各族人民按照自己的习俗&#xff0c;举行各具特色的婚礼&#xff0c;具有各自浓厚的民族独特风采。婚俗元素在是中国婚俗文化的媒介&#xff0c;承载了中华儿女对幸福和吉祥的追求。在中国婚俗文化的发展过…

基于CTFTraining在CTFd部署Web题目

下面要讲的东西是基于你已经使用CTFd搭建好了这样一个简易靶场 因为misc、crypto这些题目一般都是放附件&#xff0c;这个比较简单&#xff0c;直接做好在前端放上去就行 而部署web的题&#xff0c;我们需要在终端进行&#xff0c;这里我们使用docker-compose来进行部署 至于…

[MMDetection]COCO数据集可视化验证

在使用MMDetection训练之前&#xff0c;需要对图像进行可视化验证&#xff0c;验证数据和标签是否对齐。 # 数据集可视化 import os import matplotlib.pyplot as plt from PIL import Imageoriginal_images [] images [] texts [] plt.figure(figsize(16,12))image_paths …

惊艳!全网首份“架构师成长笔记”GitHub狂澜9000星

其实架构师是需要一个相对而言对架构师友善的环境。第一&#xff0c;架构师到底需要什么&#xff1f;一个架构师要成长&#xff0c;首先他需要信任&#xff0c;第二他需要授权&#xff0c;第三他需要时间&#xff0c;第四他需要资源&#xff0c;少一样都很难开展工作。如果一个…