AngularJS指令 - 优先考虑孩子而不是父母

时间:2013-05-29 16:10:25

标签: angularjs

如何确定孩子在父母之前编译的优先次序?

例如,假设我有一个编译Markdown的指令,我想将markdown文件分开。所以我可以:

<div markdown>
    <ng-include src='"someMarkdownFile.md"'></div>
</div>

问题在于我无法弄清楚如何首先编译ng-include。

我尝试将它们放在同一个元素上并将markdown指令设置为terminal,例如:

<div markdown ng-include src='"someMarkdownFile.md"'></div>

但由于ng-include是终端,因此它永远不会在降价指令之前运行。

这可能吗?

ANSWER

看起来答案是,你做不到。布兰登的回答有助于我的具体案例,但似乎没有办法在Angular中做到这一点。

为了阐述Brandon在下面的答案,我将HTML更改为:

<div markdown src='someMarkdownFile.md'></div>

让指令检查src属性。如果存在,请运行:

    $http.get(src, {cache: $templateCache}).success(function(resp) {
      return element.html(resp);
    }).error(function() {
      throw new Error("Could not load " + src + " from markdown directive");
    });

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。

首先,每次重新加载内容时ngInclude emits an event

  

$includeContentLoaded

     

每次重新加载ngInclude内容时都会发出。

     

<强>类型:
  发射

     

:定位:
  当前的ngInclude范围

因此,您的markdown指令可以监视此事件并重新编译降价:

app.directive('markdown', function() {
  return {
    link: function(scope, elem, attrs) {
      // ...
      scope.$on('$includeContentLoaded', function() {
        recompileMarkdown();
      });
    }
  }
});

当然,另一个选项并非完全不使用ngInclude,并且让markdown指令获取自己的降价文件,甚至可能使用$templateCache或其他$cacheFactory缓存用于缓存。 (这可能是我要去的方向;即使你让ngInclude工作,你的降价中仍然有一个DOM元素 - 我相信自己控制内容从长远来看会更容易。 )