【发布时间】:2014-06-26 23:57:28
【问题描述】:
每当父作用域中的状态发生变化时,我想在指令中执行一个函数。
实现这一点的明显方法是使用事件广播 ($broadcast) 和侦听器 ($on)。
我很好奇使用 $watch 是否可以替代事件广播。如果是,两者如何比较?
据我了解,每个 $digest 循环都会评估要监视的表达式。 那么事件比观看更有效吗?
【问题讨论】:
标签: javascript angularjs events listener watch
每当父作用域中的状态发生变化时,我想在指令中执行一个函数。
实现这一点的明显方法是使用事件广播 ($broadcast) 和侦听器 ($on)。
我很好奇使用 $watch 是否可以替代事件广播。如果是,两者如何比较?
据我了解,每个 $digest 循环都会评估要监视的表达式。 那么事件比观看更有效吗?
【问题讨论】:
标签: javascript angularjs events listener watch
$watch 函数用于观察作用域上的变量。范围继承还允许您查看父范围变量,因此这绝对是您的用例的方式。
正如您所说的那样,$on 用于监视事件,您可以将其 $broadcast 用于子范围或 $emit 用于父范围。这为您提供了更多控制权,但在编码时可能会导致更多错误,因为您可以从您不监视并忘记通知侦听器的点获取范围变量的更新。
当您不继承范围变量时,您仍然可以使用事件。但注意不要污染大范围,使用服务可能是一种选择,因为您会立即看到它是否被注入。
由于指令获得了它所在的范围(或继承自它),我想说$watch 在这里是一个更简洁的选择。
如果你想在你的指令上有一个独立的范围,你可以传递参数作为属性和$observe他们。
【讨论】: