iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Angular中使用MathJax遇到的问题有哪些
  • 925
分享到

Angular中使用MathJax遇到的问题有哪些

2024-04-02 19:04:59 925人浏览 薄情痞子
摘要

这篇文章主要介绍了angular中使用MathJax遇到的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MathJax简介Math

这篇文章主要介绍了angular中使用MathJax遇到的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

MathJax简介

MathJax是一款运行在浏览器中的开源数学符号渲染引擎,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的标记语言。MathJax项目于2009年开始,发起人有American Mathematical Society, Design Science等,还有众多的支持者,个人感觉MathJax会成为今后数学符号渲染引擎中的主流,也许现在已经是了。

个人其实也不算钻研,因为实际上 MathJax 很简单,调用 MathJax.Hub.Queue(['Typeset', MathJax.Hub, this.element.nativeElement]); 就可以渲染一个元素(这个 this.element.nativeElement 是从 Angular 中调用它 DOM 的语法),这个 .Queue 实际上是 MathJax 自己实现的回调格式,语法非常清奇,参数个数不定,每个都是数组,代表一个回调,顺序执行。比如这个 ['Typeset', MathJax.Hub, this.element.nativeElement] ,第一个元素是方法名,第二个元素是 this ,之后的元素都是参数……

我们可以看到这个就相当于执行 MathJax.Hub.Typeset(this.element.nativeElement) ,那为啥不执行这个?因为这方法是同步的,会导致页面十分卡。于是 MathJax 就自己封装了一个异步队列(它的 api 可能几百年没改了)

我们说回 Angular。因为要用 markdown,我的思路是用 marked 封装一个 directive。那么我们就应该在 marked 渲染完成之后用 MathJax 去 Typeset 这个组件。但真的这样做了,却产生了奇妙的效果——切换页面之后,要等将近一分钟才开始渲染。我在它的队列里放了几个 log,发现每个元素都被 queue 了 4 次,几十个元素,难怪要一分钟才开始渲染下一页的内容,即使大部分 markdown 里面根本没有数学。

这时候我开始灰心了,这个问题就没有解决办法了吗?绝望之时,我想到能不能直接 Typeset document,结果是可以的,而且十分快。所以渲染并不慢,可能是渲染的初始化过程比较慢。那么这时候方案就出来了,我们可以尽量减少渲染次数,同时只渲染 document。只要这个渲染还在进行,那么有再多的元素 queue 上来,我们也只当作 queue 了一次。

于是我就写了这么个 service:

@Injectable()
export class MathjaxService {
 public isQueued = false;
 public isRunning = false;
 window: any;
 constructor(@Inject(PLATFORM_ID) private platformId: Object) {
 if (isPlatformBrowser(this.platformId)) {
 this.window = window as any;
 }
 }
 finishRunning() {
 this.isRunning = false;
 if (this.isQueued) {
 this.queueChange();
 }
 }
 queueChange() {
 if (this.isRunning) {
 this.isQueued = true;
 } else {
 this.isQueued = false;
 this.isRunning = true;
 if (isPlatformBrowser(this.platformId)) {
 if (this.window.MathJax) {
  this.window.MathJax.Hub.Config({
  messageStyle: 'none',
  tex2jax: {
  // preview: 'none',
  inlineMath: [['$', '$']],
  processEscapes: true
  }
  });
  this.window.MathJax.Hub.Queue(['log', console, 'start'], ['Typeset', this.window.MathJax.Hub, document], ['log', console, 'end'], ['finishRunning', this]);
 }
 } else {
 this.finishRunning();
 }
 }
 }
}

事实证明,它能圆满完成任务,它也就是现在运行在 这个网站 上的代码。

感谢你能够认真阅读完这篇文章,希望小编分享的“Angular中使用MathJax遇到的问题有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网node.js频道,更多相关知识等着你来学习!

--结束END--

本文标题: Angular中使用MathJax遇到的问题有哪些

本文链接: https://www.lsjlt.com/news/71853.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angular中使用MathJax遇到的问题有哪些
    这篇文章主要介绍了Angular中使用MathJax遇到的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MathJax简介Math...
    99+
    2022-10-19
  • cordova使用中遇到的问题有哪些
    这篇文章主要介绍了cordova使用中遇到的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介Cordova提供了一组设备相关的A...
    99+
    2022-10-19
  • React Navigation使用中遇到的问题有哪些
    小编给大家分享一下React Navigation使用中遇到的问题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在React Native的开发中,使用到react navigati...
    99+
    2022-10-19
  • CSS中遇到有哪些问题
    这篇文章主要为大家展示了“CSS中遇到有哪些问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS中遇到有哪些问题”这篇文章吧。一、IE浏览器模式Hack标识 1、css hack标识 代码如...
    99+
    2023-06-08
  • Angular 4.X开发实践中会遇到哪些问题
    这篇文章给大家分享的是有关Angular 4.X开发实践中会遇到哪些问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、使用ngIf或者ngSwitch出错在html文件中使用...
    99+
    2022-10-19
  • 使用DBLink过程中遇到的问题有哪些
    这篇文章给大家分享的是有关使用DBLink过程中遇到的问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.     &n...
    99+
    2022-10-18
  • 使用Redis可能遇到的问题有哪些
    这篇文章主要介绍使用Redis可能遇到的问题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」。如果你在使用 Re...
    99+
    2022-10-18
  • 使用虚拟主机遇到的问题有哪些
    使用虚拟主机遇到的问题有:1、技术类问题,网页程序报错,可能是服务器配置问题或网站管理后台的用户名密码问题;2、服务类问题,包括网站程序的安装、版本升级、数据转移等;3、安全类问题,如网站遭DDOS攻击或CC攻击,网站内容被网警部门或品牌公...
    99+
    2022-10-03
  • Java中使用Map会遇到哪些问题
    Java中使用Map会遇到哪些问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下1、“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的...
    99+
    2023-05-31
    java ava map
  • apache安装遇到的问题有哪些
    这篇文章给大家分享的是有关apache安装遇到的问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、首先下载 apache 的 zip 包,并解压到指定的路径下;(如:E...
    99+
    2022-10-19
  • VueAwesomeSwiper在VUE中的使用以及遇到的问题有哪些
    这篇文章主要为大家展示了“VueAwesomeSwiper在VUE中的使用以及遇到的问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VueAwesome...
    99+
    2022-10-19
  • Hibernate应用开发遇到的问题有哪些
    这篇文章主要讲解了“Hibernate应用开发遇到的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate应用开发遇到的问题有哪些”吧!首先,学习任何一门新的框架首先要理...
    99+
    2023-06-17
  • Java开发者遇到的问题有哪些
    这篇文章主要讲解了“Java开发者遇到的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java开发者遇到的问题有哪些”吧!Java“死亡竞赛”中最难的问题让我们从最难啃的骨头开始吧...
    99+
    2023-06-17
  • 升级react-router4遇到的问题有哪些
    小编给大家分享一下升级react-router4遇到的问题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!react-router,V4版本修改内容1. 所有组件更改为从react-r...
    99+
    2022-10-19
  • Go系统遇到的锁问题有哪些
    本篇内容介绍了“Go系统遇到的锁问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!底层依赖 sync...
    99+
    2022-10-19
  • 开发中经常遇到的JavaScript问题有哪些
    今天就跟大家聊聊有关开发中经常遇到的JavaScript问题有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。获取一...
    99+
    2022-10-19
  • 小程序开发中遇到的问题有哪些
    这篇文章主要介绍小程序开发中遇到的问题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!小程序面试题bindtap和catchtap的区别是什么?bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止...
    99+
    2023-06-14
  • pytorch中DataLoader()过程中会遇到的问题有哪些
    这篇文章将为大家详细讲解有关pytorch中DataLoader()过程中会遇到的问题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如下所示:RuntimeError: stack expects ...
    99+
    2023-06-15
  • git提交代码遇到的问题有哪些
    1. 冲突问题:当多个人同时修改同一个文件的同一部分时,会产生冲突。解决冲突需要手动合并代码,并重新提交。2. 丢失修改问题:如果没...
    99+
    2023-09-15
    git
  • android开发遇到的常见问题有哪些
    1. 兼容性问题:由于Android设备的碎片化,不同设备的硬件和软件规格不同,开发者需要对不同设备进行适配和测试,以确保应用在各种...
    99+
    2023-08-15
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作