Angular 2.0和Mathjax运行不佳

时间:2016-09-20 17:34:52

标签: javascript angularjs angular mathjax

我用math 2.0拼凑了一个半工作版的mathjax,但它以一种我无法理解的方式打破。我在下面添加了一个plunkr来清楚地说明情况。

在我的代码(不是plunkr)中,这是我的相关html:

<textarea
    #editorArea
    ngDefaultControl
    spellcheck="false"
    class="editor"
    [(ngModel)]='assignment.content.text'
    (keyup)="updateResult()"
    [ngStyle]="{'height' : formatDimension(editorDimensions.height), 'padding' : formatDimension(editorDimensions.padding)}
"></textarea>

<div class="result" #result>{{ editorArea.value }}</div>

这是从HTML触发的相关更新功能:

@ViewChild('result')     result     : ElementRef;

updateResult() {
    MathJax.Hub.Queue(["Typeset", MathJax.Hub, this.result.nativeElement]);
}

最后这是我的mathJax配置:

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>

http://plnkr.co/edit/lEJZZaxKUYxFGdLtWW7Z?p=preview

1 个答案:

答案 0 :(得分:0)

这里的主要问题似乎是如何使用MathJax将<textarea>的内容重复呈现到页面的单独区域中。 Modifying Math on the Page documentation中的一个简单案例对此进行了介绍。

基本上你有两个选择:

选项1 保持渲染的数学元素,然后使用Text函数重新渲染一个新的数学字符串(注意:这要求整个textarea是一个大数学字符串,而不是散布数学字符串的普通文本){ {3}}:

HTML:

<div id="result">$ $ <!-- empty mathstring as placeholder -->

hello-mathjax.ts(部分):

ngOnInit() {
  var self = this;

  // callback function saves the rendered element, so it can
  // be re-rendered on update with the "Text" function.

  MathJax.Hub.Queue(
    ["Typeset",MathJax.Hub,"result"],
    function () {self.resultElement = MathJax.Hub.getAllJax("result")[0]; 
      self.updateResult();
      }
  );

}

updateResult () {
  // re-render the same element with the value from the textarea
  MathJax.Hub.Queue(["Text",this.resultElement,this.inputValue]);
}        
updateResult () {
  MathJax.Hub.Queue(["Text",this.resultElement,this.inputValue]);
}

选项2 每次擦除renderd div并完全重新渲染textarea的内容。 (如果textarea包含数学字符串和常规文本的混合,这就是要做的事情)Plunker

HTML:

<div id="result"></div> <!-- No placeholder math string needed -->

hello-mathjax.ts(部分):

ngOnInit() {
  var self = this;
  MathJax.Hub.Queue(
    ["Typeset",MathJax.Hub,"result"],
    function () { 
      self.updateResult();
      }
  );
}

updateResult () {
  var resultDiv = document.getElementById("result");
  // Replace the rendered content entirely
  // with the bare text from the textarea.
  resultDiv.innerHTML = this.inputValue;
  // Rerender the entire resultDiv
  MathJax.Hub.Queue(["Typeset",MathJax.Hub,"result"]);
}

此plunker演示Plunker

此Plunker演示了rendering a <textarea> that contains a mix of non-math and math statements (e.g. test test $\frac 12$)