0

我有一个指令元素:添加指令属性,以指令元素

return { 
     restrict: 'E', 
     replace: true, 
     transclude: true, 
     template: '<ul>' + 
         '<li {{myNewAttrDirective}}>Home</li>' + 
         '<li {{myNewAttrDirective}}>Products</li>' + 
         '<li {{myNewAttrDirective}}>Cart</li>' + 
         '<li {{myNewAttrDirective}}>Contact Us</li>' + 
        '</ul>', 
     scope: { 
       _showMore : '=showMore' 
     }, 
     link: function(scope, element, attrs) { 

      if (scope._showMore === true) { 
       scope.myNewAttrDirective = 'myAnimationDirective' 
      } 

     } 
    }; 

HTML:

<my-directive show-more="true"></my-directive> 

所以基本上,如果show-more等于true,则与属性指令我已经取代{{myNewAttrDirective}}my-attr-directive

我试图与上述if语句,但预计,在HTML中,我留下了很<li {{myNewAttrDirective}}>Home</li>


UPDATE:

在我的if语句,我可以通过添加属性:

var item = element.find("li"); 
item.attr("myAnimationDirective", ""); 

它在HTML中呈现,但点击事件不响应。 (但是,如果我将它们添加到我的原始指令中,它们会工作)。

回答

2

解决增加

$compile(element)(scope); 
+2

一个更优雅的解决办法是做在指令绑定编译阶段:** **编译功能允许指令操作DOM是编译和链接之前,从而使它添加/删除/更改指令,以及添加/删除/更改其他DOM元素。让我知道你是否希望我用一些代码展示这个例子。 –

+0

@CosminAbabei - 您的解决方案听起来更好,尤其是从性能的角度来看。展示会很有用。 –