园子博客后台 Angular 升级:手工迁移至 Standalone Component

news/2025/1/9 9:47:56/文章来源:https://www.cnblogs.com/dudu/p/18637966

最近在将园子博客后台的前端框架从 angular 15 升级至 angular 19,这边博文记录的是迁移至 Standalone Component 的过程。

之前尝试使用 angular 19 提供的迁移命令自动迁移,但迁移失败,详见 https://q.cnblogs.com/q/150498

ng g @angular/core:standalone

改为手动迁移,记录一下迁移过程。

删除标记与 NgModule 文件

  • 删除所有 standalone: false,一共 198
  • 删除所有 NgModule 文件,一个 84 个文件
find . -name *.module.ts -exec git rm {} \;
  • 恢复测试中使用的 NgModule 文件 testing.module.ts

迁移至 standalone bootstrapping api

  • 修改 main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { appConfig } from './app/app.config';bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
  • 创建 app.config.ts 文件并将 app.module.ts 中的 providers 迁移过来
export const appConfig: ApplicationConfig = {providers: [provideHttpClient(withFetch()),provideAnimations(),provideZoneChangeDetection({eventCoalescing: true}),provideRouter(routes,withRouterConfig({onSameUrlNavigation: 'reload'}),withPreloading(NoPreloading),withViewTransitions()),NzModalService,LoggerService,// ...]
};
  • 恢复 app-routing.module.ts 文件并重命名为 app.routes.ts
git checkout HEAD~1 app-routing.module.ts
git mv app-routing.module.ts app.routes.ts
  • 处理 app.routes.ts 中通过 loadChildren 加载 NgModule 的代码
loadChildren: () => import('./pages/posts/posts.module').then(m => m.PostsModule)
  • 将 posts.module.ts 并转换为 posts.routes.ts
git checkout HEAD~1 ./pages/posts/posts.module.ts
git mv ./pages/posts/posts.module.ts ./pages/posts/posts.routes.ts
  • 修改 posts.routes.ts,改为 export const routes, 删除 NgModule 部分代码,修改路由部分代码
export const POSTS_ROUTES: Routes = [{path: '',component: PostMainComponent,}
]
  • 修改 app.routes.ts 中对应的 loadChildren 代码
loadChildren: () => import('./pages/posts/posts.routes').then(m => m.POSTS_ROUTES)
  • 在 app.config.ts 中添加 onSameUrlNavigation 与 preloadingStrategy 配置
export const appConfig: ApplicationConfig = {providers: [provideZoneChangeDetection({eventCoalescing: true}),provideRouter(routes,withRouterConfig({onSameUrlNavigation: 'reload'}),withPreloading(NoPreloading)),provideHttpClient(withFetch()),]
};

添加 import

近 200 个 component 需要一个一个 component 添加所需的 import,这是迁移中工作量最大的部分,即使只是用到了 *ngIf 或者 [ngClass], 也要添加对应的 import,详见 https://q.cnblogs.com/q/151533

解决 ViewChild 的问题

详见博问:迁移到 Standalone Component 后 ViewChild 无法正常工作

处理 imports 中漏添加 Directive 的问题

一个 standalone component 的模板中用了某个 directive,如果没有在 imports 中添加,build 与运行是都不会报错,只是这个 directive 没有被执行。

参考资料

  • Automatic Migration to Standalone Components in 3 Steps
  • How to register nested routes on an Angular standalone component?
  • Angular 17 Http client injection
  • Bootstrapping Standalone Components

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

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

相关文章

大语言模型提示技巧(八)-防止胡说八道

自然语言往往充满歧义和模糊性,模型在学习时可能会产生误解或错误理解一些概念,导致生成不准确的信息。为了尽量减少这些问题,研究人员和工程师会使用更大规模、更多样化和更准确的训练数据,调整模型架构,以及使用更先进的训练技术。但是自然语言本身就是复杂且充满挑战的…

使用API方式远程调用ollama模型

在有GPU的环境启动一个ollama大模型,非常简单:注意,ollama启动时默认监听在127.0.0.1:11434上,可以通过配置OLLAMA_HOST环境变量修改 `export OLLAMA_HOST="0.0.0.0:11434" ollama serve& ollama run qwen2.5:7b-instruct`然后就可以在远端访问: `curl http…

JMeter——压力测试工具的安装

JMetere 简介 jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简 单。 jmeter 是免安装的,拿到安装包之后直接解压就可以使用,同时它在 linux/windows/macos 上都可以使用。 前提 已安装和…

微软开源!Office 文档轻松转 Markdown!

MarkItDown —— 微软开源的 Python 工具,能够将多种常见的文件格式(如 PDF、PowerPoint、Word、Excel、图像、音频和 HTML 等)转换为 Markdown 格式。大家好,我是 Java陈序员。 今天,给大家介绍一款微软开源的文档转 Markdown 工具。关注微信公众号:【Java陈序员】,获取…

人工智能(AI)在医学领域的应用 -九五小庞

人工智能(AI)在医学领域的应用是当前科技发展的重要方向之一,它通过提高医疗效率、准确性和个性化治疗水平,极大地改善了医疗服务的质量和患者的体验。以下是一些AI在医学领域的主要应用:辅助诊断医学影像分析:AI可以通过深度学习算法快速准确地分析CT、MRI、X光等医学影…

Ftrans汽车制造供应链管理方案,如何实现协同共赢?

汽车制造供应链管理是指对从供应商到客户的汽车产品、信息及资金流动进行集成管理的过程,旨在最大化供应链价值。在汽车制造供应链管理中,信息流扮演着至关重要的角色。它不仅是供应链各环节之间沟通协作的桥梁,也是确保供应链高效运作、降低库存成本、提升客户满意度的重要…

升级后手机版网站无法访问,可能的原因及解决方案

!在进行服务器或应用程序升级后,如果发现手机版网站无法访问,这通常是由于升级过程中某些配置发生了变化,导致移动端设备无法正确解析或加载网页内容。为了帮助您更好地理解和解决这个问题,以下是几个可能的原因及相应的解决方案:检查域名解析设置升级后,域名解析设置可…

如何解决批量主机升级未成功的问题?

如果您尝试对多个主机进行批量升级,但部分主机未能成功升级,可能是由多种原因引起的。以下是详细的排查步骤和解决方案:检查财务记录:首先,确保所有主机的升级订单已经成功支付。您可以登录到云服务提供商的控制面板,查看财务记录,确认每个主机的升级订单状态。如果存在…

游戏网站模板修改软件推荐

游戏网站通常需要独特的设计和功能来吸引玩家。有哪些推荐的模板修改软件可以帮助用户高效地修改游戏网站模板? 解决方案:选择合适的CMS平台:根据游戏网站的需求选择合适的CMS平台。常用的平台包括WordPress、DedeCMS等。这些平台提供了丰富的模板资源,方便用户快速搭建网站…

在宝塔面板上如何高效管理和修改网站配置以保障稳定运行

宝塔面板因其简洁直观的操作界面深受广大开发者喜爱,但对于初次接触的人来说,仍然可能存在一些困惑,特别是在涉及网站配置修改时。掌握正确的操作流程不仅可以提高工作效率,还能确保网站的安全性和稳定性。 解决方案安装必要组件:根据所使用的编程语言和技术栈,在宝塔面板…

如何修改网站权限

网站权限管理是确保网站安全的重要环节。如何在网站后台管理系统中修改用户权限? 解决方案:登录后台管理系统:首先,以管理员身份登录网站的后台管理系统。大多数CMS系统(如WordPress、DedeCMS等)都提供了直观的界面来管理网站内容。 找到用户管理功能:在后台管理系统中,…

使用PowerShell脚本获取并发连接数

PowerShell是微软提供的任务自动化框架,它提供了更高级的功能和更好的灵活性。利用PowerShell,我们可以轻松地获取并分析服务器的并发连接数。打开PowerShell:按下 Win + X 键,选择“Windows PowerShell (管理员)”选项启动具有管理员权限的PowerShell窗口。运行PowerShell…