2014-09-01 121 views
1

我正在努力编写自定义元素指令。该指令称为myElement,根据某些参数生成多个textareainput字段,并将ngModel应用于这些字段。编译元素指令期间传播角度属性指令

我也希望能够指定myElement上的其他属性指令,例如ngMaxlength,它会传播到动态生成的输入。

实施例:

<my-element foo="bar" ng-maxlength="100" my-other-directive/> 

可能被编译为:

<my-element foo="bar"> 
    <input type="text" ng-model="bar[abc]" ng-maxlength="100" my-other-directive/> 
    <input type="text" ng-model="bar[xyz]" ng-maxlength="100" my-other-directive/> 
</my-element> 

我还设置的myElement优先级为更高的值。但是,虽然属性已从父元素中正确删除,但其他指令(如上例中的my-other-directive)仍然会为myElement元素执行。这会导致需要ngModel的指令引发异常。我能做些什么来防止这种情况发生?

EDIT我使用角1.2.20

编辑2我的指令看起来像这样:

restrict: 'E', 
compile: function (element, attrs) { 
    var inputElements, attrsToRemove = []; 
    inputElements = ... // Create inputs based on attrs ... 
    angular.forEach(attrs.$attr, function (originalName, normalizedName) { 
     inputElements.attr(originalName, attrs[normalizedName]); 
      attrsToRemove.push(originalName); 
     } 
    }); 
    angular.forEach(attrsToRemove, function (name) { 
     element.removeAttr(name); 
    }); 
} 
+0

是这样'<我的-element foo =“bar”my-child-directives =“ng-maxlength ='100'my-other-directive”/>'你有效的选择吗?这个想法是传递一个字符串与你想包含在子元素中的指令,而不是直接在父元素上定义它们。 – bmleite 2014-09-01 13:19:55

+0

你的代码在哪里? – Sacho 2014-09-01 13:42:23

+0

@bmleite你是个天才!为什么我没有想到这个?奇迹般有效。谢谢! – user2323470 2014-09-02 08:09:25

回答

0
+0

链接ngtutorial.com资源被破坏;答案是陈旧的 – 2016-04-04 16:10:47

+1

更新了链接... – 2016-04-25 06:06:16