【问题标题】:ngx-MathJax rerendering directive failing to rerenderngx-MathJax 重新渲染指令无法重新渲染
【发布时间】:2021-12-18 18:13:33
【问题描述】:

我目前正在尝试渲染动态 MathJax 内容:

<div mathjax #math>
    $$Weight = {{ mass }} * {{ g }}$$
</div>

这工作正常,直到我在更改一些变量后尝试重新渲染。因此,例如,如果我改变了质量,那么我希望上面 HTML 中的值也会改变。

为此,我需要对 MathJax 指令的实例执行 MathJaxTypeset() 调用,以便按照 ngx-mathjax github page 上的说明:

我使用 viewchild 来获取页面上的实例...

@ViewChild('math', { static: false, read: MathJaxDirective }) mathsExpressions?: MathJaxDirective;

然后在它们需要更新时对其运行 MathJaxTypeset()...

makeNewValues(): void {
    this.mathsExpressions.MathJaxTypeset();
}

但是这会产生错误...

ERROR TypeError: Cannot read properties of undefined (reading 'MathJaxTypeset')

我在指令的使用和操作方面没有经验,因此不确定我如何以及为什么会收到错误。如果似乎无法找到要排版的实例,我认为问题出在 viewchild 中。

更新

这是一个 stackblitz 使用较新的模块 mathjax-angular。您会注意到模板中有三行代码显示了 mathjax 样式值。前两个:

<div [mathjax]="displayString"></div>
<div [mathjax]>{{ displayString }}</div>

两者都在运行时工作,并且看起来相同,但只有顶部的在值更新时会重新呈现。这不太理想,因为这意味着将文档的内容分成 .ts 和 .html 文件,然后在更新任何值时使用 mathjax 代码手动更新字符串。

第三次供品:

<div [mathjax]>$$Random = {{ randomNumber }}$$</div>

在我的代码中渲染,但不在 stackblitz 上 - 样式或依赖项之间没有区别。 SB 上的 Angular 是 v12,我使用的是 v13,但这是唯一的区别。如果这渲染得当,那正是我想要的……

我想要的是在更新值时更新 HTML(第三行)中的内联代码。

已经尝试过

SO 上的大部分内容似乎与 AngularJS 相关或不特定于 ngx-angular,但 this thread on SO 似乎是同样的问题。然而,该解决方案并没有改变我自己的代码。

app.module.ts

在我的 app.module.ts 我有:

MathJaxModule.forRoot()

【问题讨论】:

    标签: angular mathjax


    【解决方案1】:

    该库的 GitHub 存储库(不再维护)列出了一个类似问题:https://github.com/davidshen84/ngx-mathjax/issues/10#issue-525662151,没有明确的解决方案。

    您可以直接将MathJax 用作脚本,而不是通过ngx-mathjax,尽管似乎有一个替代方案mathjax-angular。通过快速查看源代码,该库为您创建了 head script 元素,因此可能值得一试:

    https://github.com/sajivkumar/mathjax-angular

    一旦属性名称更改,您问题中的第三个选项似乎可以正常工作:randomnumber -> randomNumber

    【讨论】:

    • 谢谢你,我没有注意到它不再被维护......在对 angular 和 npm 进行了一堆更新之后,这个 mathjax-angular 并没有以同样的方式更新......它可以正确呈现方程式,但不会随值更新。我不确定您所说的 head 和 script 元素是什么意思,这有什么帮助?谢谢,我仍然很难使用这个:/
    • 我的意思是 mathjax-angular 会为您加载脚本,因此它比您自己手动加载要容易,如 MathJax 文档中所述。如果您创建问题的 StackBlitz 演示并分享链接,有人可能会深入了解它
    • 谢谢,我已经做了一个例子,并发布在上面的“更新”下的帖子中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多