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

news2024/11/18 9:27:45

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.coloradmin.cn/o/1302923.html

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

相关文章

关于 SAP S/4HANA 中的控制您应该了解什么-Part1

原文地址&#xff1a;What you should know about controlling in SAP S/4HANA. (Part 1) | SAP Blogs &#xff08;自 SAP S/4HANA 版本 1909 起更新&#xff09; 作为一名CO顾问&#xff0c;我对 SAP ERP 中央组件 (ECC) 向 SAP S/4HANA 的演变感到非常兴奋。 自从第一个版…

13.触发器

目录 1、创建触发器 1、创建只有一个执行语句的触发器 2、创建有多个执行语句的触发器 2、查看触发器 1、通过SHOW TRIGGERS查看触发器: 2.在triggers 表中查看触发器信息 3、使用触发器 4、删除触发器 1、创建触发器 MySQL 的触发器和存储过程一样&#xff0c;都是嵌…

高效扫频阻垢装置广谱感应水处理设备介绍工作原理使用参数和选型

​ 1&#xff1a;高效扫频阻垢装置设备介绍 高效扫频阻垢装置是一种通过控制箱释放变频电磁信号&#xff0c;传输到信号放大装置&#xff0c;管道外侧的电磁线圈和电锤产生高频机械振动&#xff0c;在管道和水中传输&#xff0c;通过共振机理破坏水分子之间的氢键&#xff0c;产…

ubuntu 命令行安装 conda

安装包地址&#xff1a; Index of / 找到对应的版本&#xff0c;右键点复制链接 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.shbash Anaconda3-2023.09-0-Linux-x86_64.sh https://linzhji.blog.csdn.net/article/details/126530244

计算机病毒判定专家系统原理与设计《文字提取人工修正》

内容源于网络。网络上流转的版本实在是不易阅读&#xff0c; 又不忍神作被糟蹋故稍作整理&#xff0c;对于内容仍然有识别不准的地方&#xff0c;网友可留言&#xff0c;我跟进修改。 雷 军 &#xff08;武汉大学计算机系&#xff0c;430072) 摘要: 本文详细地描述了…

Excel表格转换word的两个方法

Excel表格想要转换到word文档中&#xff0c;直接粘贴复制的话&#xff0c;可能会导致表格格式错乱&#xff0c;那么如何转换才能够保证表格不错乱&#xff1f;今天分享两个方法&#xff0c;excel表格转换为word文件。 方法一&#xff1a; 首先打开excel表格&#xff0c;将表格…

Linux部署Kettle(pentaho-server-ce-9.4.0.0-343)记录/配置MySQL存储

下载地址 Kettle 是一个开源的数据集成工具&#xff0c;它是 Pentaho Data Integration&#xff08;PDI&#xff09;项目的一部分。要访问 Kettle 的官方网站&#xff0c;可以通过访问其母公司 Hitachi Vantara 的网站来找到相关信息 官方网站&#xff1a;https://www.hitachi…

面试 JVM 八股文五问五答第一期

面试 JVM 八股文五问五答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.JVM内存布局 Heap (堆区&#xff09; 堆是 OOM 故障最主要的发生区域。它是内存…

class074 背包dp-分组背包、完全背包【算法】

class074 背包dp-分组背包、完全背包【算法】 算法讲解074【必备】背包dp-分组背包、完全背包 code1 P1757 通天之分组背包 // 分组背包(模版) // 给定一个正数m表示背包的容量&#xff0c;有n个货物可供挑选 // 每个货物有自己的体积(容量消耗)、价值(获得收益)、组号(分组)…

分布式搜索引擎02

分布式搜索引擎02 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…

小红书笔记种草表现怎么看,营销攻略!

小红书平台的传播&#xff0c;离不开内容种草。当我们撰写好一篇笔记并进行发布后&#xff0c;该如何衡量这篇笔记的种草表现呢?今天我们为大家分享下小红书笔记种草表现怎么看&#xff0c;营销攻略&#xff01; 一、小红书笔记种草衡量指标 想要了解小红书笔记种草表现怎么看…

智能监控平台/视频共享融合系统EasyCVR接入大华SDK后只有一路通道可云台控制该如何解决?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

31、卷积 - 参数 dilation 以及空洞卷积

在卷积算法中,还有一个不常见的参数叫做dilation(中文:膨胀)。 很多同学可能没听说过这个参数,下面看看这个参数有什么作用,用来控制什么的。 我们还是放这个经典的卷积运算图,图中是看不出 dilation 这个参数的存在的。 如果再换一张图呢,发现两图的区别了吗? 没错…

蓝桥杯Web组学习总结 - 目录导航版

HTML5 HTML 基础标签 HTML5 标签列表 HTML5 新特性 HTML5都有哪些新特性&#xff1f; CSS3 CSS 基础语法 CSS参考手册 盒子模型 CSS Box Model (盒子模型) 浮动与定位&#xff1f;&#xff1f; CSS 浮动(float)与定位(position) CSS布局之浮动和定位 CSS3 新特性 …

Python从入门到精通五:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题&#xff1a;如果我想要在程序中&#xff0c;记录5名学生的信息&#xff0c;如姓名。 如何做呢&#xff1f; 学习数据容器&#xff0c;就是为了批量存储或批量使用多份数据 Python中的数据容器&#xff1a; 一种可以容纳多份…

【每日一题】—— B. StORage room(Codeforces Round 912 (Div. 2))(位操作符)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

LeetCode5.最长回文子串

昨天和之前打比赛的队友聊天&#xff0c;他说他面百度面到这道算法题&#xff0c;然后他用暴力法解的&#xff0c;面试官让他优化他没优化出来&#xff0c;这道题我之前没写过&#xff0c;我就想看看我能不能用效率高一点的方法把它做出来&#xff0c;我一开始就在想用递归或者…

排程系统中关于任务优先级的需求延伸与设计构思

无论是面向销售订单的MPS&#xff0c;还是基于多工序制约关系的APS&#xff0c;还是具体车间生产中针对单一工序的任务作业调度优化&#xff0c;都存在基于被排程对象(例如销售订单、生产工单、工序任务)的优先级进行优化的需求场景。当我们仅在宏观、较高层次的角度考虑&#…

Linux高级管理-基于域名的虚拟Web主机搭建

客服机限制地址 通过 Require 配置项&#xff0c;可以根据主机的主机名或P地址来决定是否允许客户端访问。在httpd服 务器的主配置文件的<Location>&#xff0c;<Directory>、<Files>、<Limit>配置段中均可以使用Require 配置 项来控制客户端的访问。使…

Python常见面试知识总结(二):数据结构、类方法及异常处理

【十三】Python中assert的作用&#xff1f; Python中assert&#xff08;断言&#xff09;用于判断一个表达式&#xff0c;在表达式条件为 f a l s e false false的时候触发异常。 断言可以在条件不满足程序运行的情况下直接返回错误&#xff0c;而不必等待程序运行后出现崩溃…