我有一个AngularJS指令,directiveFoo
由一个属性实例化:
<div directiveFoo></div>
我希望我的directiveFoo
总是实例化另一个指令,例如模板是:
<div directiveBar="123"></div>
我的问题是——这是否可能在不创建所有浪费节点的情况下做到?我想将replace
添加到我的指令中,但随后它吹走了directiveFoo
我最终想要的是:
<div directiveFoo directiveBar="123"></div>
与两个控制器连接。
这是一个简化的例子。我想阻止:
<div directiveA>
<div directiveB>
<div directiveC="123">
<div directiveD></div>
</div>
</div>
</div>
在我不需要所有嵌套DOM节点的情况下
然后直接吹走
这是不应该的。替换过程将所有的属性/类从旧元素迁移到新元素。——指令文档
因为属性是迁移的,所以directive-foo
应该显示在生成的HTML中。
app.directive('directiveFoo', function() {
return {
template: '<div directive-bar="123">bar</div>',
replace: true,
}
});
上面的指令产生了以下HTML(在Chrome中测试):
<div directive-bar="123" directive-foo>bar</div>
小提琴。
在小提琴中,我还为每个指令创建了一个控制器(因为你提到你想要的),我显示directive-bar
可以访问directive-foo
的控制器。
(我把bar
作为文本放在模板中,只是为了方便右键单击它并选择"Inspect element")