【发布时间】:2020-05-01 07:44:03
【问题描述】:
我正在尝试让 MathJax 和 Angular 一起运行。我使用ngx-mathjax 作为 Angular 的 MathJax 集成。到目前为止,这是我的代码:
<div mathjax>
{{ field | keepHtml }}
</div>
field 包含 html(用于格式化)和 MathJax 公式的混合,例如<b>This</b> is an example <b>equation</b>: \( 2x+3=2 \)。 keepHtml 是一个自定义管道,它利用 DomSanitizer 绕过 html 卫生:
import { Pipe, PipeTransform } from '@angular/core';
import {DomSanitizer, SafeHtml} from '@angular/platform-browser';
@Pipe({
name: 'keepHtml',
pure: false
})
export class KeepHtmlPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {
}
transform(content: string): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(content);
}
}
我想将格式化的 html 与渲染的 MathJax 方程一起插入。但我只运行一件事:
<div mathjax [innerHtml]="field | keepHtml">
</div>
... 只工作一次,只要field 更新,MathJax 就不再更新方程了。当我这样做时
<div mathjax>
{{ field }}
</div>
html 已被清理,因此 html-tags 被打印为文本。 MathJax 方程虽然被正确渲染和更新。在第一个代码 sn-p 中使用 innerHtml 之外的 keepHtml-Pipe 会引发错误 SafeValue must use [property]=binding...。我如何让所有东西协同工作?
编辑
这是我的 MathJax 配置:
MathJaxModule.forRoot({
version: '2.7.5',
config: 'TeX-AMS_HTML',
hostname: 'cdnjs.cloudflare.com'
}),
【问题讨论】:
-
你能告诉我你的
MathJaxModule.forRoot配置吗? -
我将其添加到问题中
-
我正在尝试创建一个 stackblitz,但它似乎没有做任何事情。我可以在模板中获得对指令的引用,但它只是显示纯文本。我做错了吗?
-
实际上发布 stackblitz 链接会派上用场:stack