我是Javascript和AngularJS的新手。在我看来,两者都是事件监听者。有什么区别?我可以互换使用它们吗?如何?
$scope.$on 将捕获$scope上的 .$broadcast() 事件,而 addEventListener 侦听页面上的任何事件。它们相似但不可互换。
如果在角度应用程序中工作,除非另有需要,否则我肯定会使用 $scope.$on,即从角度应用程序外部捕获事件。 如果您正在编写单元测试,并且只从您自己的代码中查找事件,则您将获得可测试性,这可能是您正在寻找的。
No.它们在不同的对象上运行,并且不可互换,尽管它们的作用非常相似。两者都向可以发出事件的对象添加一个事件侦听器,但作用域不是 HTMLElements(如document
),并且在作用域上触发的事件与在 HTML 上触发的事件不同。
尽可能使用$scope.$on
。通常,如果有 Angular 的方式来做某事,你应该这样做。
$scope.$on
与将数据发送到所有父控制器的 $scope.$emit
和将数据发送到所有子控制器的$scope.$broadcast
结合使用。这使您可以更好地控制通过应用程序的数据流。此外,在本机事件侦听器中处理事件将破坏双向数据绑定。