【问题标题】:Propagating angular attribute directives during compilation of element directive在元素指令的编译期间传播角度属性指令
【发布时间】:2014-09-01 12:53:33
【问题描述】:

我正在努力编写自定义元素指令。该指令,我们称之为myElement,根据某些参数生成多个textareainput 字段并将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);
    });
}

【问题讨论】:

  • 这样的&lt;my-element foo="bar" my-child-directives="ng-maxlength='100' my-other-directive"/&gt; 对您来说是一个有效的选择吗?这个想法是传递一个带有您想要包含在子元素中的指令的字符串,而不是直接在父元素上定义它们。
  • @bmleite 你真是个天才!为什么我没有想到呢?奇迹般有效。谢谢!

标签: angularjs angularjs-directive


【解决方案1】:

【讨论】:

  • 链接的 ngtutorial.com 资源已损坏;答案是陈旧的
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2013-10-17
相关资源
最近更新 更多