在元素指令编译期间传播角度属性指令

时间:2014-09-01 12:53:33

标签: angularjs angularjs-directive

我正在努力编写自定义元素指令。该指令将其称为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的指令抛出异常。我该怎么做才能防止这种情况?

编辑我使用角度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);
    });
}

1 个答案:

答案 0 :(得分:0)