2015-02-06 79 views
1

我有一个自定义指令,它使用MathJax.js呈现带有乳胶的字符串,下面是代码。在自定义指令中转义HTML

MathJax.Hub.Config({ 
    skipStartupTypeset: true, 
    tex2jax: { 
     inlineMath: [['$','$'], ['\\(','\\)']], 
     processEscapes: true 
    } 
}); 
MathJax.Hub.Configured(); 

angular.module('mathjaxModule', []) 

.directive("mathjaxBind", function() { 
    return { 
     restrict: "A", 
     controller: ["$scope", "$element", "$attrs", function($scope, $element, $attrs) { 
      $scope.$watch($attrs.mathjaxBind, function(value) { 
       $element.text(value == undefined ? "" : value); 
       MathJax.Hub.Queue(["Typeset", MathJax.Hub, $element[0]]); 
      }); 
     }] 
    }; 
}); 

并且你使用这样的: <span mathjax-bind="textToRender"></span>

这个指令是非常方便,因为我可以用MathJax表达式组合的文本,只要数学表达式中$$,一切都呈现很好。文本作为使用MathJax的文本和数学表达式。

问题是,其中一些字符串也包含HTML,并且我在使用自定义指令时似乎无法使用ng-bind-html

我想这样的事情没有成功:

<span mathjax-bind="textToRender" ng-bind-html="textToRender"></span>

也许我误解的概念。我怎么能解决这个问题?

回答

1

我有同样的需要,我发现从这里的答案:http://blog.datacamp.com/mathjax-binding-in-angular-js/

这里是我的代码:

.directive('mathjax',function(){ 
    return { 
    restrict: 'A', 
    link: function($scope, $element, $attrs) { 
     $scope.$watch($attrs.ngBindHtml, function() { 
     MathJax.Hub.Queue(['Typeset',MathJax.Hub,$element[0]]); 
     }); 
    } 
    }; 
}); 

然后使用它像:<span ng-bind-html="textToRender" mathjax></span>