我使用MathJax的javascript库版本2.6.1和Angular 1.4应用程序。我有一个页面,我有多个标签,我称之为相同的指令,它在标签上调用MathJax.Hub.Queue(" Typeset",MathJax.Hub,elem [0])。似乎第一个项目的角色卡在预处理状态(灰色预览文本)上,并且没有完全处理到最终形式。
在页面加载时,我也调用MathJax.Hub.Queue(" Typeset",MathJax.Hub,document.body)然后它工作正常。从AngularJS加载标签时,第一个标签卡在预处理状态。
答案 0 :(得分:0)
自从我找到解决方案后回答我自己的问题:
我花了几个小时调试MathJax代码,似乎没有什么不对。我猜测MathJax的队列实现与AngularJS的范围观察效果不佳。将MathJax.Hub.Queue("Typeset", MathJax.Hub, elem[0])
放入$timeout(fn, 0)
。
固定指令最终看起来像这样:
angular.module('xpl.widget').directive('mathjaxBind', mathjax);
/* ngInject */
function mathjax($timeout) {
return {
priority: 100,
restrict: "A",
link: {
post: postLink
}
}
// ## postLink
function postLink(scope, elem, attrs) {
MathJax.Hub.Config({
"HTML-CSS": {
styles: {
".MathJax_Display": {
"overflow-x": "auto"
}
}
}
});
scope.$watch(attrs.mathjaxBind, function (newVal, oldVal, scope) {
// Add $timeout to MathJax Typesetting due to bug where first result wasn't getting queued properly.
$timeout(function() {
MathJax.Hub.Queue(["Typeset", MathJax.Hub, elem[0]]);
}, 0);
});
}
}