如何确定孩子在父母之前编译的优先次序?
例如,假设我有一个编译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");
});
答案 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元素 - 我相信自己控制内容从长远来看会更容易。 )