
引言
在现代 Web 应用中,展示代码片段并进行语法高亮是一个常见需求。Prism.js 是一个轻量级、可扩展的语法高亮库,因其简洁高效而广受欢迎。然而,当代码内容不是静态存在于 HTML 中,而是从数据库或其他异步源动态加载到 Angular 组件时,Prism.js 往往不会自动对新内容进行高亮。这通常会导致新加载的代码显示为纯文本,而非预期的带颜色高亮效果。
本教程将详细阐述如何在 Angular 应用中解决这一问题,确保动态加载的代码内容能够被 Prism.js 正确识别并高亮显示。
问题分析:Prism.js 的工作机制与动态内容
Prism.js 在页面加载时会扫描 DOM,查找带有特定 language-xxx 类的
结构,并对其内容进行语法高亮。当通过 JavaScript 或 Angular 的数据绑定动态更改这些 标签内的文本内容时,Prism.js 不会默认重新扫描并高亮这些更新。为了使新内容生效,我们需要手动触发 Prism.js 的高亮机制。Prism.js 提供了两种主要的刷新方法:
- Prism.highlightAll(): 重新扫描整个 DOM 并高亮所有符合条件的元素。这在页面初始化时非常有用,但在动态更新时效率较低,因为它会处理所有元素,即使它们没有改变。
- Prism.highlightElement(element): 仅对指定的 DOM 元素进行高亮。这是处理动态内容的理想选择,因为它允许我们精确控制需要刷新的代码块,从而提高性能。
解决方案:结合 Angular 生命周期与 Prism.highlightElement()
为了在 Angular 应用中动态刷新 Prism.js 高亮,我们需要在代码内容更新后,且 DOM 已经渲染了新内容时,调用 Prism.highlightElement() 方法。Angular 的数据绑定和生命周期钩子提供了完美的集成点。
1. HTML 模板结构
首先,确保您的 HTML 模板遵循 Prism.js 的推荐结构,通常是
组合,并绑定动态内容和语言类型。textarea 用于用户输入或显示原始文本,而 pre/code 组合用于高亮显示。










