【Angular开发】Angular 16发布:发现前7大功能

Angular 于2023年5月3日发布了主要版本升级版Angular 16。作为一名Angular开发人员,我发现这次升级很有趣,因为与以前的版本相比有一些显著的改进。

因此,在本文中,我将讨论Angular 16的前7个特性,以便您更好地理解。

1.Angular Signals

Angular Signals是自Angular 16路线图发布以来,开发人员一直在等待的主要功能。虽然Solid.js启发了这个概念,但它对Angular来说是一个全新的概念。它允许您定义反应值并表达它们之间的依赖关系。换句话说,您可以有效地使用Angular信号来管理Angular应用程序中的状态更改。

信号可以被识别为用户可以同步访问的规则变量。但它还附带了一些附加功能,比如通知其他人(组件模板、其他信号、函数等)其值的更改,以及以声明的方式创建派生状态。

以下示例显示了如何使用“角度”信号。

import { Component, computed, effect, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
import { bootstrapApplication } from '@angular/platform-browser';@Component({selector: 'my-app',standalone: true,imports: [CommonModule],template: `<h1>Calculate Area</h1><p>Answer : {{ area() }}</p><button (click)="calculateArea(10,10)">Click</button>`,
})export class App {height = signal(5);width = signal(5);area = computed(() => this.height() * this.width());constructor() {effect(() => console.log('Value changed:', this.area()));}calculateArea(height: number, width: number) {this.height.set(height);this.width.set(width);}
}

在本例中,我创建了一个计算值区域和两个名为height和width的信号。当通过调用calculateArea()函数更改信号值时,计算值将更新并显示在模板中。这里有一个工作的Stacklitz示例供您尝试。

虽然这看起来很神奇,但Angular并没有放弃zone.js和RxJS。信号是一个可选功能,Angular在没有它们的情况下仍然可以工作。Angular将在即将推出的版本中逐步改进Signals,使其成为一个完整的包。

2.服务器端渲染

与React相比,缺乏服务器端渲染(SSR)支持是Angular最显著的缺点之一。Angular 16通过对服务器端渲染的一些重大改进解决了这个问题。

以前,Angular对SSR使用破坏性水合作用。在破坏性水合中,服务器首先将应用程序渲染并加载到浏览器。然后,当客户端应用程序下载并启动时,它会破坏已经渲染的DOM,并从头开始重新渲染客户端应用程序。这种方法导致了重大的用户体验问题,如屏幕闪烁,并对一些核心Web Vitals(如LCP或CLS.anug)产生了负面影响。

Angular 16引入了一种称为非破坏性水合的新方法来防止这些缺点。下载并引导客户端应用程序时,DOM不会被破坏。它使用相同的DOM,同时使用事件侦听器等客户端功能对其进行丰富。

无损水合作用仍处于开发者预览阶段。但是,您可以通过在引导应用程序时添加provideClientHydration()作为提供程序来启用它。

import {bootstrapApplication,provideClientHydration,
} from '@angular/platform-browser';...bootstrapApplication(RootCmp, {providers: [provideClientHydration()]
});

根据Angular的官方发布说明,这只是一个开始。他们计划在下一步探索部分水合作用,并满足开发人员的几个要求。您可以在这里找到更多关于Angular SSR开发计划的信息。

3.实验性Jest支持

Jest是JavaScript开发人员中使用最多的测试框架之一。Angular已经听取了开发人员的请求,并在Angular 16中引入了实验性的Jest支持。

您所要做的就是使用npm安装Jest并更新angular.json文件。

// Install jest
npm install jest --save-dev// angular.json
{"projects": {"my-app": {"architect": {"test": {"builder": "@angular-devkit/build-angular:jest","options": {"tsConfig": "tsconfig.spec.json","polyfills": ["zone.js", "zone.js/testing"]}}}}
}

他们计划在未来的更新中将所有现有的Karma项目转移到WebTestRunner。

4.基于esbuild的构建系统

Angular 16为开发服务器(ng-server)引入了一个基于esbuild的构建系统。Vite为这个新的开发服务器供电,并使用esbuild来构建工件。

这仍然处于开发人员预览阶段,但您可以通过使用以下内容更新angular.json文件来启用它。

"architect": {"build": { "builder": "@angular-devkit/build-angular:browser-esbuild",
...

5.Required Inputs

在Angular 16中,现在可以根据需要定义输入值。您可以使用@Input装饰器或@Component装饰器输入数组来定义一个。

export class App {@Input({ required: true }) name: string = '';
}// or
@Component({...inputs: [{name: 'name', required: true}]
})

6.路由器输入

Angular 16允许您将路由参数绑定到组件输入中,从而无需将ActivatedRoute注入组件。若要启用此功能,必须导入RouterModule并在app.module.ts文件中启用bindToComponentInputs属性。

@NgModule({imports: [...RouterModule.forRoot([], {bindToComponentInputs: true })...],...
})
export class AppModule {}

The following example shows how we can bind query params to component inputs.

// Route
const routes: Routes = [{path: "articles",component: ArticleComponent,},
];// Component
@Component({})
export class ArticleComponent implements OnInit {@Input() articleId?: string; ngOnInit() {}
}

Now, when you navigate to the articles route, you can pass query params using the name of the component input. In this case, an example URL will look like the following.

http://localhost:4200/articles?articleId=001

If the input name is too long, you can rename the query parameter.

http://localhost:4200/articles?id=001 @Input('id') articleId?: string;

You can also use this approach to bind path parameters and route data.

7.独立项目支持

Angular 14开始支持独立于模块的独立组件。Angular 16通过支持独立项目创建,将此提升到了一个新的水平。

Angular 16有一个通过Angular CLI创建独立项目的标志。您必须使用-standalone标志执行ng个新命令。然后,它将生成一个没有NgModules的项目。

ng new --standalone

Standalone Project Support in Angular 16

其他功能

Angular 16还提供了许多其他改进开发人员体验的更改:

  • 通过语言服务自动导入组件和管道。
  • 通过CLI支持TypeScript 5.0、ECMAScript装饰器、服务工作者和SCP。
  • CSP支持在线样式。
  • 自闭标签。
  • 停止对ngcc和TypeScript 4.8的支持。

结论

总体而言,Angular 16提供了一些重要功能。这些功能中的大多数都是我们在后续版本中可以期待的更大更新的垫脚石。您可以按照Angular的官方文档将现有项目升级到Angular 16。

如果您有任何问题,请通过我们的支持论坛、支持门户或反馈门户与我们联系。我们非常乐意为您提供帮助!

本文:【Angular开发】Angular 16发布:发现前7大功能 | 程序员云开发,云时代的程序员.

欢迎收藏【架构师酒馆】和【开发者开聊】

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

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

相关文章

机器学习基础介绍

百度百科&#xff1a; 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 …

手工酸奶店如何选址?开在哪里比较合适?

手工酸奶店是一个非常受欢迎的创业项目&#xff0c;但想要成功开店&#xff0c;选址是非常重要的。 本人开酸奶店5年时间&#xff0c;下面我将为大家分享一些选址的小技巧&#xff0c;希望对大家有所帮助。&#xff08;可以点赞收藏&#xff0c;方便以后随时查阅&#xff09; …

入职字节外包一个月,我离职了。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

12.11 C++ 作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

树根研习社|数据为王,洞察“工业数据采集”背后的价值与实践

一、工业数据采集是什么&#xff1f; 数据采集是将各种信息传感设备通过网络结合起来&#xff0c;实现任何时间、任何地点&#xff0c;人、机、物的互联互通。数据采集的主要的作用是&#xff1a; “翻译官”&#xff1a;不同程序语言的设备数据通过协议解析“翻译”为上层系…

淘宝权益玩法平台的Serverless化实践

通过对权益玩法平台现有业务应用的Serverless化改造&#xff0c;权益团队在双十一期间完美地支撑了业务需求&#xff0c;在研发效率、运维保障等方面都体现出了很高的价值和收益。 项目背景 淘宝权益平台是负责淘宝权益营销的核心团队&#xff0c;团队除了负责拉菲权益平台外&a…

1.cloud-微服务架构编码构建

1.微服务cloud整体聚合父工程 1.1 New Project 1.2 Maven选版本 1.3 字符编码 1.4 注解生效激活 主要为lombok中的Data 1.5 java编译版本选8 1.6 File Type过滤 *.hprof;*.idea;*.iml;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;vssver.scc;v…

Nginx配置文件的基本用法

Nginx简介 1.1概述 Nginx是一个高性能的HTTP和反向代理服务器。 是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器 单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 1.2Nginx和Apache的优缺点 &#xff…

mybatis数据输出-insert操作时获取自增列的值给对应的属性赋值

jdbc-修改 水果库存系统的 BaseDao 的 executeUpdate 方法支持返回自增列-CSDN博客 1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSE…

王炸升级!PartyRock 10分钟构建 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢&#xff0c;每次都能带来一些最前沿的方向标&#xff0c;这次也不例外。在看完一些 keynote 和介绍之后&#xff0c;我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…

基于SSM的健身房预约系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

网络安全攻击预警/态势预测算法汇总

总结&#xff1a; 网络安全攻击预警/态势预测算法众多&#xff0c;主要包括&#xff1a; 基于统计学的算法&#xff1a;协方差矩阵、马尔可夫模型等&#xff1b; 基于机器学习的算法&#xff1a;贝叶斯网络、聚类算法、支持向量机SVM、遗传算法、层次分析法AHP、决策树等&am…

Proxmark3 Easy救砖-20231209

事情是这样的&#xff0c;在淘宝买了个PM3&#xff0c;拿到手后刷固件的&#xff0c;一不小心刷成砖头了&#xff0c;现象就是四个灯全亮&#xff0c;插上电脑USB不识别。问商家他也不太懂&#xff0c;也是个半吊子技术&#xff0c;远程给我刷机搞了半天也没有搞定&#xff0c;…

微表情检测(三)----基于光流特征的微表情检测

Micro-expression spotting based on optical flow features 基于光流特征的微表情检测 Abstract 本文提出了一种高精度和可解释性的自动微表情检测方法。首先&#xff0c;我们设计了基于鼻尖位置的图像对齐方法&#xff0c;以消除由头部晃动引起的全局位移。其次&#xff0…

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建&#xff1f; int count…

Linux上编译和测试V8引擎源码

介绍 V8引擎是一款高性能的JavaScript引擎&#xff0c;广泛应用于Chrome浏览器和Node.js等项目中。在本篇博客中&#xff0c;我们将介绍如何在Linux系统上使用depot_tools工具编译和测试V8引擎源码。 步骤一&#xff1a;安装depot_tools depot_tools是一个用于Chromium开发…

学习IO的第七天

作业&#xff1a;使用消息队列完成两个进程间的相互通信 #include <head.h>struct msgbuf {long mtype; //消息类型char mtext[1024]; //正文大小 };#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[]) {//1.创…

DevEco Studio将编辑器整体文本改为简体中文

我们打开编辑器 随便进入一个项目 这里 我们左上角目录 选择 File下面菜单中的 Settings… 打开配置界面 然后在设置窗口左侧导航栏中 选择 Plugins 插件 然后上方导航栏中 选择 Installed 参考下图 然后 找到这个Chinese(Simplified) Chinese是什么应该不用我多说吧 我们把…

区块链扩容问题研究【06】

1.Plasma&#xff1a;Plasma 是一种基于以太坊区块链的 Layer2 扩容方案&#xff0c;它通过建立一个分层结构的区块链网络&#xff0c;将大量的交易放到子链上进行处理&#xff0c;从而提高了以太坊的吞吐量。Plasma 还可以通过智能合约实现跨链交易&#xff0c;使得不同的区块…

简单的 u-popup 弹出框

uniapp中的popup组件可以用于弹出简单的提示框、操作框、菜单等。它可以通过position属性控制弹出框的位置&#xff0c;不同的position值会使得弹出框呈现不同的弹出形式 目录 一、实现思路 二、实现步骤 ①view部分展示 ②JavaScript 内容 ③css中样式展示 三、效果展示 …