我在plnkr中创建了一个示例: http://plnkr.co/edit/kcclSc10nPB8Qzm3qr7s?p=preview
在那里你可以看到有一个指令是在编译函数中添加另一个指令,如果父ng-if
上没有div
,它会很好地工作。一旦ng-if
存在,第二个指令就不再起作用了。它适用于ng-show
。
我的真实情况是我需要在某些按钮上添加工具提示。我们使用的工具提示是一个获取要显示的文本的指令。我们根据密钥从后端接收的文本。因此,不能通过所有控制器调用服务来获取基于密钥的文本,然后将文本添加到范围并将其提供给tooltip指令。
其中一个按钮是ok按钮,其中atm只是一个复选标记的图像。只有这个按钮出现在72个文件中,所以手动更改所有内容不是一个选项。因此,我在代码中查找了class="acceptbtn"
,并将其替换为新的指令名称class="acceptbtn"
。所以现在所有按钮都有我的指令来获取密钥。在我的指令中,我得到了基于我传递的键的文本,并且我在这个元素中添加了带有我收到的文本的tooltip指令。
在某些情况下,这很有效。问题是,如果有div
的包装ng-if
,它就不起作用。在所有这些文件中查找所有ng-if
也不是一个选项(除非没有其他选项)。
那么有办法解决这个问题吗?意思是,在plnkr中,第三个div应该看起来像第二个div。 感谢
答案 0 :(得分:1)
工作Plunkr
app.directive('dir1', function($compile){
return{
restrict: 'A',
link: function(scope, element, attrs) {
element.removeAttr('dir1');
element.attr('dir2', '');
$compile(element)(scope);
}
}
});
app.directive('dir2', function($compile){
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.removeAttr('dir2');
element.attr('style', "width:400px");
$compile(element)(scope);
}
};
});
我使用链接功能稍微修改了你的指令。我个人仅在对指令模板进行运行时更改时才使用编译。