Angular JS $ watch vs $ on

Yog*_*gaj 34 javascript events listener watch angularjs

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

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

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

据我所知,每个$ digest周期都会评估要监视的表达式.活动比手表更有效吗?

Fer*_*ler 32

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

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

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

如果要在指令上使用隔离范围,可以将参数作为属性传递$observe给它们.

  • 只要您通过服务严格控制您的广播事件 - 无论如何应该是最佳实践 - 我认为手表的性能节省超过其他任何事情.至少在有大量$ watch(显式或隐式)的页面上.至少你应该做一个手表计数chk,看看你落入哪个阵营. (3认同)