Angular JS $ watch vs $ on

时间:2014-05-09 09:38:27

标签: javascript angularjs events listener watch

我希望在父作用域中发生状态更改时在指令内执行函数。

实现这一目标的显而易见的方法是使用事件广播($broadcast)和听众($on)。

如果使用$ watch是事件广播的替代方案,我很好奇。如果是的话,两者如何进行比较?

据我所知,每个$ digest周期都会评估要监视的表达式。 那么事件比手表更有效吗?

1 个答案:

答案 0 :(得分:32)

$watch函数用于观察范围内的变量。范围继承允许您也可以查看父范围变量,因此这绝对是您使用案例的方法。 正如您所说,$on用于监视事件,您可以$broadcast到子范围或$emit到父范围。这为您提供了更多的控制,但是在编码时可能会导致更多的错误,因为您可以从您不监视并忘记通知侦听器的点获取范围变量的更新。

如果不继承范围变量,仍可以使用事件。但要注意不要污染大范围,使用服务可能是一种选择,因为你会立即看到它是否被注入。

由于一个指令获取它所在的范围(或从它继承),我会说$watch是一个更清洁的选择。

如果你想在你的指令上有一个孤立的范围,你可以将参数作为属性和$observe传递。