0

Working on a directive to highlight <code> tags that are being outputted by a directive to render <markdown> tags.

The problem is that the <code> directive is never hit after the <markdown> directive runs. However the <code> directive runs on code tags that are not outputted from the <markdown> directive.

The Markdown directive

angular.module('App').directive "markdown", ->
  converter = new Showdown.converter()

  scope: true
  restrict: 'E'
  link: (scope, element, attrs) ->
    if attrs.markdown
      scope.$watch attrs.markdown, (newVal) ->
        html = converter.makeHtml(newVal)
        element.html(html)
    else
      redraw = ->
        html = converter.makeHtml(element.text())
        element.html(html)

        #### expecting the code directive to be trigger after this.

      scope.$on "$includeContentLoaded", redraw
      redraw()

Any thoughts?

4

1 に答える 1

1

AngularJS は、マークダウンから何かをコンパイルすることを知りません。そのようなものをコンパイルする方法は 2 つあります。1 つの方法はトランスクルージョンを使用することですが、それはあなたのユースケースではうまくいかないと思います。あなたの場合、マークダウンから変更をコンパイルする必要があります。これを行うには、Angular の $compile サービスを使用します。

まず、$compileサービスをディレクティブに挿入します。次に、を設定した後element.html(html)、これを試してください:$compile(element.contents())(scope);

于 2013-06-11T20:51:04.420 に答える