AngularJS指令:attr,带有其他指令的名称

时间:2014-05-20 19:30:34

标签: angularjs angularjs-directive

一个简单的例子来解释我的案例:

我有标签指令

<input label="{{obj.label}}"/>

但是对于其他一些指令,我想使用名为“label”的属性

<other-directive label="My label"></other-directive>

作为属性,不处理label-directive。

我可以将属性重命名为例如“我的标签”:

<other-directive my-label="My label"></other-directive>

但最好使用“label”作为属性名称。

1 个答案:

答案 0 :(得分:1)

正如@ExpertSystem在问题的评论中指出的那样,角度真的无法知道你的指令是应该在一个案例中应用而不是另一个案例。我能想到解决这个问题的唯一方法是在你的指令编译函数中包含逻辑,该函数知道如何确定它是否应该被应用。 This plunker演示了如何实现这一目标。您基本上需要从编译阶段返回两个不同的链接函数;一个如果你的指令应该被应用(在这种情况下在输入之前添加一个标签),另一个应该被跳过。然后,您可以将其用作单独指令的参数。如果您的指令需要执行诸如转换或隔离范围之类的事情(这些事情与角度不同,并且在同一元素上有两个指令要做),这可能不起作用。

但是,我会非常谨慎地使用它,因为它会为可能使用此代码的其他开发人员创建一个不一致的API。他们可能不知道该指令何时适用以及什么时候赢了。