1

我写了一个属性受限的 Angular 指令 ( restrict:'a'),它将特性添加到textarea. 将其应用于任何其他类型的元素是没有意义的。

添加 aif (element.nodeName == 'TEXTAREA') {真的很脏而且不可靠。

我试图添加require: textarea到它,但它不起作用,我得到这个错误:Error: No controller: textarea

问题:有没有更简洁的方法来正确应用此限制?

编辑:第一个答案之后的附加约束。

我想避免在此指令中使用模板,因为我希望能够使用这种类型的多个指令。这是我想要的一个例子:

<textarea splittable shared mergeable></textarea>

4

3 回答 3

2

当使用您自己的指令(例如my-textarea)时restrict: 'E', replace: true,任何附加属性都将被转移到指令的根元素,甚至是其他属性指令。所以:

<my-textarea splittable class="foobar"></my-textarea>

可以呈现为:

<textarea splittable="" class="foobar"></textarea>

随着splittable被执行。

演示:http: //jsfiddle.net/LMq3M/

所以我认为使用你自己的指令确实是处理这个问题的最干净的方法。

于 2013-09-05T08:51:18.463 回答
1

在我看来,没有必要添加这样的控件,因为当真正的问题是人为错误时,它们只会添加复杂的代码。

只需记录该指令的目的和用途。

于 2013-09-05T08:41:55.677 回答
0

这个想法是你给你的指令一个唯一的名字,比如 myDirective ,你可以在 HTML 中使用它。

<body>
    <my-directive></my-directive>
</body>

该指令将使用您在指令控制器中提供的模板替换标记。在您的情况下,这可能是一个带有附加属性的简单 textarea 元素。

我建议观看此视频以清楚地掌握指令的概念。 http://www.youtube.com/watch?v=xoIHkM4KpHM

于 2013-09-05T08:29:05.773 回答