尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 ng generate @angular/core:control-flow 把模板迁移到 Angular 控制流语法?

如何用 ng generate @angular/core:control-flow 把模板迁移到 Angular 控制流语法? 如何用 ng generate angular/core:control-flow 把模板迁移到 Angular 控制流语法【免费下载链接】angularDeliver web apps with confidence 项目地址: https://gitcode.com/GitHub_Trending/an/angular如果你的应用还在使用*ngIf、*ngFor、*ngSwitch这类结构化指令想把现有模板批量改写成 Angular 的控制流块语法if、for、switch等可以用angular/core内置的迁移 schematic 一键完成。控制流语法从 Angular v17 开始提供而且新语法直接内置在模板中不再需要为此导入CommonModule。这篇文章基于 Angular 仓库中的迁移说明与 schematic 源码给出可执行的迁移路径和结果判断方法。迁移会改什么、不会改什么执行ng generate angular/core:control-flow后schematic 会把项目中现有模板里的*ngIf、*ngFor、*ngSwitch替换为等价的块语法。有两点边界需要注意来自 schematic 的 README模板中已有的ng-template定义会被保留因为它们在模板其他地方仍可能被引用该 schematic 的注册描述是 Converts the entire application to block control flow syntax别名是control-flow完整注册信息见 collection.json。仓库文档给出了一个改写前后的对比示例示例结果实际项目以自身模板为准// 迁移前 import {Component} from angular/core; Component({ template: divspan *ngIfshowContent here/span/div, }) export class MyComp { show false; }// 迁移后 import {Component} from angular/core; Component({ template: div if (show) { spanContent here/span } /div, }) export class MyComp { show false; }如果想了解新语法的完整写法if/else if/else、for的track、empty、上下文变量等可以参考 控制流语法指南。执行迁移命令基本用法就是运行下面这条命令见 迁移说明文档ng generate angular/core:control-flow该 schematic 有两个参数定义见 schema.json参数作用默认值path相对项目根目录、需要迁移的路径可用于逐个迁移特定子目录./项目根目录format是否对迁移后的模板重新格式化true如果交互式提示不想要也可以用命令行参数直接指定例如只迁移某个目录ng generate angular/core:control-flow --path ./src/app/features此外仓库中的迁移参考说明提到这类angular/core迁移命令可以用--project name或--path dir把范围限定到特定项目或目录见 migrations.md。两点限制来自 schematic 实现path不能以..开头否则会直接报错Cannot run control flow migration outside of the current project.即迁移范围不能超出当前项目schematic 依赖项目中的 tsconfig 文件来收集要迁移的文件如果找不到任何 tsconfig会输出警告Could not find any tsconfig file. Cannot run the control flow migration.并停止。判断迁移是否成功schematic 运行结束时的日志输出是主要的判断依据均来自 index.ts 中的实现正常完成、无警告说明迁移按预期执行没有出现报错。出现错误日志会先打印WARNING: N errors occurred during your migration:随后逐条列出错误每个出错模板的格式是Template 路径 encountered N errors during migration:之后按- 错误类型: 错误信息列出具体原因。此时需要按提示回到对应模板文件人工处理。没有可迁移文件日志会打印Control flow migration did not find any files to migrate说明path指向的范围内没有命中任何源文件检查传入的路径是否正确。跑完命令后再抽查改动文件模板中原来写*ngIfshow的位置应变成if (show) { ... }块*ngFor应变成带track表达式的for块。改写规则与上文迁移会改什么一节给出的示例一致。迁移后需要知道的行为差异这是一个与*ngFor不同的重要行为变化Breaking changes见 control-flow.mdfor块中如果track表达式用到的属性被原地修改对象引用不变Angular 会更新视图绑定包括组件输入而不是销毁并重建元素对应的*ngFor场景下如果trackBy函数返回了不同的值则会执行元素的重新挂载销毁并重建。也就是说迁移后组件实例不再像旧语法那样在某些场景下被重建依赖重建副作用的旧逻辑需要重新审视。另外控制流指南中对track的选型建议优先使用id/uuid等唯一属性静态集合可用$index尽量避免track item这种按引用跟踪的写法同样适用于迁移后的for块。下一步仓库中还有一系列同类的angular/core迁移 schematicstandalone、inject()、signal inputs、signal queries、outputs、自关闭标签、ngClass/ngStyle转换等完整列表与迁移卡片见 Migrations 总览也可以运行ng generate angular/core: --help查看当前安装版本中可用的全部迁移命令。【免费下载链接】angularDeliver web apps with confidence 项目地址: https://gitcode.com/GitHub_Trending/an/angular创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表