一尘不染

Angular JS $ watch vs $ on

angularjs

每当父范围中的状态发生变化时,我都希望在指令内执行一个函数。

实现此目的的明显方法是使用事件广播($
broadcast
)和侦听器($
on
)。

我很好奇是否可以使用$ watch代替事件广播。如果是,那么两者如何比较?

据我了解,要观察的表达式在每个$ digest循环中进行评估。那么事件比观看更有效吗?


阅读 208

收藏
2020-07-04

共1个答案

一尘不染

$watch函数用于监视范围内的变量。作用域继承还允许您监视父作用域变量,因此,这绝对是使用案例的方法。正如您正确地说的,$on它用于监视事件,您可以监视事件$broadcast到子作用域或$emit父作用域。这样可以给您更多的控制权,但是在编码时可能会导致更多的错误,因为您可以从不监视的地方更新范围变量,而忘记通知侦听器。

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

由于指令获取其作用域(或从其继承)的作用域,因此我想$watch在这里说一个更清洁的选择。

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

2020-07-04