【发布时间】:2014-09-01 12:53:33
【问题描述】:
我正在努力编写自定义元素指令。该指令,我们称之为myElement,根据某些参数生成多个textarea 或input 字段并将ngModels 应用于这些字段。
我还希望能够在 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 的指令抛出异常。我能做些什么来防止这种情况发生?
编辑我使用的是 Angular 1.2.20
EDIT 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);
});
}
【问题讨论】:
-
这样的
<my-element foo="bar" my-child-directives="ng-maxlength='100' my-other-directive"/>对您来说是一个有效的选择吗?这个想法是传递一个带有您想要包含在子元素中的指令的字符串,而不是直接在父元素上定义它们。 -
@bmleite 你真是个天才!为什么我没有想到呢?奇迹般有效。谢谢!
标签: angularjs angularjs-directive