如何更改指令元素父级的属性

时间:2014-06-27 01:07:21

标签: angularjs

我开始使用限制用作属性的指令,并且在使用时,它会将ng-mouseover添加到应用的元素中。这似乎是一项微不足道的任务,你只需要$compile,对吧?错了,它只会在你决定拥有一个孤立的范围之前工作。 here's jsbin that explains what I'm talking about

无论如何,我无法解决这个问题。

现在,也许通过制定指令restrict:'E'并转换其中的任何内容来解决这一难题。作品?当然。 jsbin

但是现在,我意识到我需要将这些鼠标事件应用于元素本身而不是其父元素。正如在第一种情况下,我努力添加属性并保留内容而没有scopepocalypse,我再次遇到类似的麻烦。

你们能告诉我一个简单的例子,如何制作一个带有隔离范围的指令,为其父级添加ng-mouseevent属性吗?

有时我因故意过度复杂自己的生活而感到愚蠢。也许我只需要在指令控制器内部将好的旧事件处理程序附加到父元素?是的,似乎是一个简单的修复,但这在概念上是错误的,并且再次出现角度的传统,不是吗?

1 个答案:

答案 0 :(得分:2)

如果您正在实现编译或链接功能,则角度方式是永远不会动态地将指令附加到父项。编译和链接过程是单向的 - 这意味着父母是在孩子之前编译的。当然,你可以试图反对交通,但这样做很困难,有风险,而且比它的价值更麻烦。通过向父节点添加指令,然后尝试重新编译它,您可能会多次重新编译指令,或者更糟糕的是,引入一个微妙的内存泄漏。这是一条艰难的道路,我建议不要这样做。这不是有角度的方式。

我不应该问自己,如何向父母添加指令,问问自己,如何向孩子们添加指令?子指令可以通过“要求”与父母指令进行通信。属性。通常,这足以处理大多数情况。

要回答你的第二个问题,在指令定义中挂钩JavaScript事件是完全可以接受的(你认为如何实现ng-mouseover?)。如果这样做,您应该在链接功能中执行此操作。