$scope.$emit 和 $rootScope.$emit 有什么区别?
我正在使用它从指令向控制器发出信号,并且它可以双向工作!
$scope.$emit 和 $rootScope.$emit 有什么区别?
我正在使用它从指令向控制器发出信号,并且它可以双向工作!
$scope.$emit
允许当前范围和父级(包括 rootScope)监听事件。
$rootScope.$emit
仅允许 rootScope 侦听特定事件。
$scope.$emit
当您想要它$scope
及其所有父母并$rootScope
能够听到该事件时,它很有用。$scope.$emit
是孩子对父母发牢骚$scope
。
和
$rootScope.$emit
只让其他$rootScope
听众捕捉它。当您不想通知每个$scope
.
$emit()
在链中向上发送对其父作用域的更改。
因此,当您这样做时$scope.$emit
,您正在向父范围发送通知,该范围可能是另一个$scope
,也可能是$rootScope
.
它基本上像childScope > parentScope(s)
.
它的对立面是.broadcast()
。
.broadcast()
广播对子范围的更改。所以,如果你$rootScope
从那时起广播,所有的孩子都会$scope
听。
$emit(名称,参数);
通过范围层次结构向上调度事件
name
,通知已注册的 $rootScope.Scope 侦听器。事件生命周期从调用 $emit 的范围开始。在此范围内侦听名称事件的所有侦听器都会收到通知。之后,事件向上遍历到根作用域并沿途调用所有注册的侦听器。如果其中一个侦听器取消该事件,该事件将停止传播。
侦听器发出的任何异常都将传递给 $exceptionHandler 服务。