指令内的指令

时间:2013-06-11 20:20:56

标签: angularjs angularjs-directive

使用指令突出显示指令输出的<code>标记以呈现<markdown>标记。

问题是<code>指令在<markdown>指令运行后永远不会被命中。但是<code>指令运行在未从<markdown>指令输出的代码标记上。

Markdown指令

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()

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

AngularJS不知道从你的降价中编译任何东西。有两种方法可以编译这些东西。一种方法是使用transclusion,但我认为这不适用于您的用例。在您的情况下,您需要从降价处编译更改。为此,您使用Angular的$ compile服务。

首先,将$compile服务注入您的指令。然后设置element.html(html)后,请尝试以下操作:$compile(element.contents())(scope);