AngularJS:$ scope。$ on和document.addEventListener之间的差异

时间:2016-03-18 19:15:24

标签: javascript angularjs event-handling

我是Javascript和AngularJS的新手。在我看来,两者都是一个事件倾听者。有什么区别?我可以互换使用吗?怎么样?

3 个答案:

答案 0 :(得分:4)

$ scope。$ on将在$ scope上捕获$。broadcast()事件,而addEventListener监听页面上的任何事件。它们相似但不可互换。

如果在角度应用程序中工作,我肯定会使用$ scope。$ on,除非另有需要,即从角度应用程序外部捕获事件。如果您正在编写单元测试,并且只会从您自己的代码中查找事件,那么您将获得可测试性,这可能是您正在寻找的。

答案 1 :(得分:1)

没有。它们在不同的对象上运行,并且不可互换,尽管它们在中非常相似。两者都向可以发出事件的对象添加事件侦听器,但是作用域不是HTMLElements(如document),并且在作用域上触发的事件不同于HTMLElements。

答案 2 :(得分:1)

应尽可能使用

$scope.$on。通常,如果有一种Angular方式可以做某事,你应该这样做。

$scope.$on$scope.$emit一起使用,后者将数据发送到所有父控制器,$scope.$broadcast将数据发送到所有子控制器。这使您可以更好地控制通过应用程序的数据流。此外,处理本机事件侦听器内部的事件将破坏双向数据绑定。