WEB-TOOLS-03MathJax与Vue

2019-11-03  本文已影响0人  杨强AT南京

  把MathJax应用到Vue框架中,其中的关键是引入的脚本在Vue可以使用,Vue有全局变量的解决机制,这里直接在全局index.html文件中引入,这不是最好的方式。
  在Vue中使用主要注意三个步骤:
  1. 引入的模块以及关联资源;
  2. Vue的数据处理与显示处理方式;
  3. MathJax转换处理;


前言

引入正确的js脚本

引用公共资源


    <script type="text/javascript" id="MathJax-script" async
      src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
    </script>

引入本地资源

    <script type="text/javascript" id="MathJax-script" async
      src="./js/tex-chtml.js">
    </script>
MathJax组件脚本引入

在Vue中处理模式

绑定输入源

定义一个属性

export default {
    name: 'index',
    data: () => {
        return {
            ......
            latex: '数学公式测试:a^2 + b^2 = \\dfrac{c}{d}',
        };
    },
    computed: {
        
    },
};

使用v-model绑定组件


<div class="body_mid">
            <ul>
                <li>
                    <section> 
                        <textarea v-model="latex">LaTex输入区域</textarea>
                    </section>
                </li>
                <li>
                    <div> 
                    </div>
                </li>
            </ul>
        </div>

使用计算属性

定义一个计算属性

export default {
    name: 'index',
    data: () => {
        return {
            ......
            latex: '数学公式测试:a^2 + b^2 = \\dfrac{c}{d}',
        };
    },
    computed: {
        tex2html() {
            .....
            return '<h1>Hello</h1>';
        },
    },
};

使用v-html输出计算结果

<div class="body_mid">
    <ul>
        <li>
            <section> 
                <textarea v-model="latex">LaTex输入区域</textarea>
            </section>
        </li>
        <li>
            <div v-html="tex2html"> 
            </div>
        </li>
    </ul>
</div>

转换的代码实现


export default {
    name: 'index',
    data: () => {
        return {
            .....
            latex: '数学公式测试:a^2 + b^2 = \\dfrac{c}{d}',
        };
    },
    computed: {
        tex2html() {
            const options = {
                em: 19.200000762939453,
                ex: 8.533333333333333,
                containerWidth: 626.40625,
                lineWidth: 1000000, 
                scale: 1.005530377338936,
                display: false,
            };
            // var input = "a^2 + b^2 = \\dfrac{x}{y}";
            var input = this.latex;
            var html = MathJax.tex2chtml(input, options);  // 返回的是DOM对象
            return  html.outerHTML;
        },
    },
};


附录

MathJax对HTML页面的自动处理


<!DOCTYPE html>
<html>
<head>
<title>MathJax TeX Test Page</title>
<script type="text/javascript" id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
</script>
</head>
<body>
When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</body>
</html>
页面的直接处理方式

ES6与ES5的兼容处理

    <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>

关于webpack


上一篇 下一篇

猜你喜欢

热点阅读