我希望在父作用域中发生状态更改时在指令内执行函数。
实现这一目标的显而易见的方法是使用事件广播($broadcast)和听众($on)。
如果使用$ watch是事件广播的替代方案,我很好奇。如果是的话,两者如何进行比较?
据我所知,每个$ digest周期都会评估要监视的表达式。 那么事件比手表更有效吗?
答案 0 :(得分:32)
$watch
函数用于观察范围内的变量。范围继承允许您也可以查看父范围变量,因此这绝对是您使用案例的方法。
正如您所说,$on
用于监视事件,您可以$broadcast
到子范围或$emit
到父范围。这为您提供了更多的控制,但是在编码时可能会导致更多的错误,因为您可以从您不监视并忘记通知侦听器的点获取范围变量的更新。
如果不继承范围变量,仍可以使用事件。但要注意不要污染大范围,使用服务可能是一种选择,因为你会立即看到它是否被注入。
由于一个指令获取它所在的范围(或从它继承),我会说$watch
是一个更清洁的选择。
如果你想在你的指令上有一个孤立的范围,你可以将参数作为属性和$observe
传递。