Angular 15有什么新特性?
Angular 15于2022年11月初发布。这个版本带来了很多新特性,比我们以前使用的Angular主要版本都要多。
让我们一个一个地深入研究一些重要的新功能:
指令组合API
在Angular 15之前,我们可以使用继承来创建一个扩展另一个指令的指令。虽然继承可以工作,但使用复合通常会更灵活,这正是Angular 15允许我们做的。
这是怎么做到的呢?如果我们想要创建一个自动应用一个或多个其他指令的组件或指令,我们可以使用以下语法:
@ component ({
选择器:“管理页面”,
模板:“admin-menu.html”,
hostDirectives:(MenuBehavior),
})
导出类AdminMenu {}
在上面的例子中,指令MenuBehavior总是应用于AdminMenu组件,不需要向组件的宿主HTML元素添加任何选择器。
甚至可以使用以下语法将输入和输出转发到这些指令:
@ component ({
选择器:“管理页面”,
模板:“admin-menu.html”,
hostDirectives: [{
指令:MenuBehavior,
输入:['menuId: id'],
输出:['menuClosed: closed'],
}),
})
导出类AdminMenu {}
上面的代码意味着id属性上的管理页面元素变成menuId的输入MenuBehavior指令。同样,关闭的输出管理页面元素变成menuClosed的输出MenuBehavior.
结果,AdminMenu组件可以这样使用:
如你所见,这个MenuBehavior指令在HTML中不“可见”。所以不需要额外的选择器。
完整的文档可以在这里找到更多关于指令组合API.
稳定的独立api
的Angular 14中引入的独立组件API作为一个开发人员预览现在完全稳定和开发人员预览。
注意,你可以用新的Angular CLI选项生成一个独立的组件:
MyComponent——独立的
这个特性完全支持无模块的Angular应用。例如,我们可以使用以下语法的独立组件引导这样一个应用程序:
bootstrapApplication (MyStandaloneAppComponent);
这种变化的另一个后果是可以在没有模块的情况下进行惰性加载。相反,我们可以使用下面的语法惰性加载一堆路由:
export const appRoutes: Routes = [{
路径:“懒”,
loadChildren: () => import('./lazy/lazy.routes')
.then(routes => routes. lazyroutes)
});
与lazyRoutes在lazy.routes.ts像这样:
import {Routes} from '@angular/router';
import {LazyComponent} from './lazy.component';
import {LazyDashboardComponent} from './lazy-dashboard.component';
export const lazyRoutes: Routes = [
{path: ",组件:LazyComponent},
{path: 'dashboard',组件:LazyDashboardComponent},
];
不涉及模块!
图像优化指令(NgOptimizedImage)
当涉及到任何web应用程序的性能时,图像是至关重要的。但不幸的是,我们可以尝试优化Javascript代码并在各处节省数千字节,结果却发现我们的努力被大量需要花费太多时间才能下载的图像所破坏。
图像指令的设计就是为了帮助解决这个问题。
它的作用:
- 智能延迟加载:在页面加载时用户不可见的图像稍后会在用户向下滚动到该页面部分时加载。
- 关键图像的优先级:首先加载基本图像(例如标题横幅)
- 针对流行图像工具的优化配置:如果你使用的是CDN,该指令将自动从CDN中选择适当的图像大小,根据该图像将显示在屏幕上的像素数优化下载大小。
- 内置错误和警告:除了上述内置优化之外,该指令还具有内置检查,以确保开发人员在图像标记中遵循了推荐的最佳实践。
指令可以与ngSrc属性,而不仅仅是src:
![]()
的NgOptimizedImage指令是@的一部分角/常见模块,就像ngFor而且ngIf,所以如果你使用这些指令,它已经是你工具箱的一部分了。
它也可以作为一个独立的指令使用,而不需要导入CommonModule.它的官方文档和有关的更多信息这个指令背后的魔力可以在这里找到.
更好的堆栈跟踪,以便更快地调试
堆栈跟踪对于更快地调试代码至关重要。因此,Angular团队会继续研究更多出错的方法,让堆栈跟踪变得更集中、更明确、更相关。
在此之前,堆栈跟踪将包括Zone.js,这对我们正在编写的代码没有帮助:
在Angular 15中,现在只显示堆栈跟踪的相关部分:
很快,它会变得更好,上面的最后一行被替换为:
At
这样,我们就能立即知道是哪行代码触发了问题。
Angular CDK列表框
有几种方法可以使用HTML创建可选项的下拉列表和列表选择标签到完全自定义选项使用div或ul而且李.
我们从自定义(样式、验证规则)方面获得的东西通常会变成在可访问性方面的损失。
通过使用@angular / cdk /列表框,我们得到了所有可访问体验的预期行为,包括双向布局支持、键盘交互和焦点管理:
一些例子可以在这里找到.
改善语文服务
Angular语言服务不断改进,为所有开发人员带来更好的IDE体验。
Angular 15带来了自动组件导入当一个组件第一次使用并且之前没有导入(作为独立组件或从模块导入)时。
功能强大的路由器防护
这行代码改变了我们在Angular中看待路由器保护的方式:
Const route = {
路径:“管理”,
canActivate: [() => inject(LoginService).isLoggedIn()]
};
类的实现不需要创建特定的类canActivate接口。现在一个简单的函数就可以完成这项工作了!
类似地,惰性加载可以在组件级别上使用独立组件,使用以下语法:
{
路径:“懒”,
loadComponent: () => import('./my.component').then(m => m.MyComponent),
}
如果组件定义是其文件中的默认导出,则可以进一步简化上面的示例。这叫做auto-unwrap并导致以下更短的配置:
{
路径:“懒”,
loadComponent: () => import('./my.component'),
}
日期管道的默认格式选项
最后,由于大多数应用程序在所有屏幕和组件中使用一致的日期格式,我们现在可以使用名为DATE_PIPE_DEFAULT_OPTIONS:
供应商:[
{
提供:DATE_PIPE_DEFAULT_OPTIONS,
useValue: {dateFormat: 'shortDate'}
}
]
Angular团队发布的官方文章可以在这里找到更多信息:https://blog.angular.io/angular-v15-is-now-available-df7be7f2f4c8
我叫betway必威滚球.我是Angular的谷歌开发专家,也是角训练在那里我帮助web开发团队学习并熟悉Angular。
如果您在网页开发方面需要任何帮助,请随时与我们联系!
如果你喜欢这篇文章,请鼓掌或分享。你的帮助我永远感激。你也可以点击此处订阅Medium.