$ scope。$ emit和$ rootScope。$ emit?
之间有什么区别我正在使用它从指令发送到控制器,它可以两种方式工作!
答案 0 :(得分:1)
$scope.$emit
允许当前范围和父级(包括rootScope)监听事件。
$rootScope.$emit
只允许rootScope监听特定事件。
答案 1 :(得分:0)
$scope.$emit
及其所有父母和$scope
能够听到此事件时, $rootScope
非常有用。 $scope.$emit
是一个抱怨父母的孩子$scope
。
并且
$rootScope.$emit
只允许其他$rootScope
侦听器捕获它。如果您不想通知每个$scope
,这非常有用。
答案 2 :(得分:-1)
$emit()
在链中向上发送对其父作用域的更改。
因此,当您执行$scope.$emit
时,您要向父作用域发送通知,该通知可以是另一个$scope
,也可能是$rootScope
。
它基本上像childScope > parentScope(s)
一样工作。
它的对面是.broadcast()
。
.broadcast()
广播对子范围的更改。因此,如果您从$rootScope
广播,则所有孩子$scope
都会收听。
$ emit(name,args);
通过范围层次结构向上调度事件
name
,通知已注册的$ rootScope.Scope侦听器。事件生命周期从调用$ emit的范围开始。监听此范围内的名称事件的所有侦听器都会收到通知。之后,事件向上遍历根范围并沿途调用所有已注册的侦听器。如果其中一个侦听器取消它,该事件将停止传播。
从侦听器发出的任何异常都将传递给$ exceptionHandler服务。