我有两个指令,一个父母和一个孩子,我想要一种从父母那里获取信息的方式,以便孩子在编译阶段获得该信息。
具体来说,我有"树" (父)和"树节点" (子)指令,我想根据附加到树本身(父)的属性修改树节点(子)的模板。
对于任何有兴趣的人,您都可以在GitHub上看到代码:
我还要指出树节点本身实际上是deferring it's compilation until post link,所以也许会打开一些门。
我想避免在节点中进行任何dom遍历(即递归检查父元素以在树指令上查找属性)。此外,请记住,页面上可能有多个树指令,他们可能需要稍后动态创建新节点,所以我不认为我可以真正逃脱,例如暂时将信息闪烁到服务中。
答案 0 :(得分:0)
在compile
阶段,或pre-link
阶段(按降序完成,与通常的post-link
阶段相反),您的子指令只会知道它自己的模板,这意味着你无法避免寻找父树元素。
但是,您可以在pre-link
阶段为父树范围设置一些属性,并将它们访问到您的子节点指令(前置链接或后置链接,对子节点无关紧要)。
例如在Tree:
compile: function() {
return {
pre: function(scope, elem) {
scope.something = doSomethingWith(elem);
}
};
}
你传递给你的treenode:
<tree-node tree-data="something"></tree-node>
(仅当范围被隔离时,否则可以立即访问)
答案 1 :(得分:0)
经过一番搜索后,我没有找到一种惯用的方法来完成我追求的目标。我最终解决了利用我们(已经)修改过的编译过程的问题。
基本上这个想法是:
postLink
函数get传递了对父控制器的引用。使用控制器从父指令获取信息并为子项构建新模板。编译此模板并将其附加到孩子身上。如果有人有更优雅的选择,我很乐意接受它!