我正在努力编写自定义元素指令。该指令称为myElement
,根据某些参数生成多个textarea
或input
字段,并将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);
});
}
是这样'<我的-element foo =“bar”my-child-directives =“ng-maxlength ='100'my-other-directive”/>'你有效的选择吗?这个想法是传递一个字符串与你想包含在子元素中的指令,而不是直接在父元素上定义它们。 – bmleite 2014-09-01 13:19:55
你的代码在哪里? – Sacho 2014-09-01 13:42:23
@bmleite你是个天才!为什么我没有想到这个?奇迹般有效。谢谢! – user2323470 2014-09-02 08:09:25