Dev*_*man 7 javascript mathjax vue.js vuejs2
我正在构建一个 vue 应用程序,我想使用MathJax来渲染方程。我可以在安装组件时渲染方程,但我无法在稍后重新渲染方程。
我制造了一个 代码沙箱示例来演示这一点。尝试更改输入中的乳胶方程,即使控制台显示观察者正在运行,也没有任何变化。
有人可以向我解释我做错了什么吗?
我通过cdn在index.html的头部添加了mathjax,配置如下
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'],['\\(','\\)']],
}
});
</script>
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_CHTML"></script>
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序组件中的代码
<template>
<div id="app">
<input v-model="latex"/><br>
<div>{{latex}}</div>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
latex: '$$\\frac{a}{b}$$'
}
},
methods: {
reRender() {
if(window.MathJax) {
console.log('rendering mathjax');
window.MathJax.Hub.Queue(["Typeset", window.MathJax.Hub], () => console.log('done'));
}
}
},
mounted() {
this.reRender();
},
watch: {
latex: function() {
console.log('data changed')
this.reRender();
}
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
我可以通过添加两件事来使它工作。
https://codesandbox.io/s/x2mlq38m4z
添加key到div。key是虚拟 DOM 的指标。当key相同时,Vue 可能会重用相同的 div 元素。当key变化,Vue公司将呈现一个完全新的DOM元素,当你想第三方库的代码(MathJax)适用于从头DOM这是有帮助的。
<div :key="latex">{{latex}}</div>
使用$nextTick以便在 DOM 更新后重新渲染。
像这样
watch: {
latex: function() {
console.log('data changed');
this.$nextTick().then(()=>{
this.reRender();
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |