在ng-if中的另一个指令内编译指令

时间:2017-02-10 14:26:22

标签: angularjs angularjs-directive

我在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。 感谢

1 个答案:

答案 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);
    }
    };
});

我使用链接功能稍微修改了你的指令。我个人仅在对指令模板进行运行时更改时才使用编译。