每当父范围中的状态发生变化时,我都希望在指令内执行一个函数。
实现此目的的明显方法是使用事件广播($ broadcast)和侦听器($ on)。
我很好奇是否可以使用$ watch代替事件广播。如果是,那么两者如何比较?
据我了解,要观察的表达式在每个$ digest循环中进行评估。那么事件比观看更有效吗?
该$watch函数用于监视范围内的变量。作用域继承还允许您监视父作用域变量,因此,这绝对是使用案例的方法。正如您正确地说的,$on它用于监视事件,您可以监视事件$broadcast到子作用域或$emit父作用域。这样可以给您更多的控制权,但是在编码时可能会导致更多的错误,因为您可以从不监视的地方更新范围变量,而忘记通知侦听器。
$watch
$on
$broadcast
$emit
当您不继承作用域变量时,仍然可以使用事件。但是请注意不要污染大范围,使用服务可能是一种选择,因为您会立即看到它是否被注入。
由于指令获取其作用域(或从其继承)的作用域,因此我想$watch在这里说一个更清洁的选择。
如果要在指令上使用隔离范围,则可以将参数作为属性传递$observe。
$observe