0

$scope.$emit 和 $rootScope.$emit 有什么区别?

我正在使用它从指令向控制器发出信号,并且它可以双向工作!

4

3 回答 3

1

$scope.$emit允许当前范围和父级(包括 rootScope)监听事件。

$rootScope.$emit仅允许 rootScope 侦听特定事件。

于 2016-02-01T13:55:52.507 回答
0

$scope.$emit当您想要它$scope及其所有父母并$rootScope能够听到该事件时,它很有用。$scope.$emit是孩子对父母发牢骚$scope

$rootScope.$emit只让其他$rootScope听众捕捉它。当您不想通知每个$scope.

于 2016-02-01T13:53:28.627 回答
-1

$emit()在链中向上发送对其父作用域的更改。

因此,当您这样做时$scope.$emit,您正在向父范围发送通知,该范围可能是另一个$scope,也可能是$rootScope.
它基本上像childScope > parentScope(s).

它的对立面是.broadcast()

.broadcast()广播对子范围的更改。所以,如果你$rootScope从那时起广播,所有的孩子都会$scope听。


从文档:

$emit(名称,参数);

通过范围层次结构向上调度事件name,通知已注册的 $rootScope.Scope 侦听器。

事件生命周期从调用 $emit 的范围开始。在此范围内侦听名称事件的所有侦听器都会收到通知。之后,事件向上遍历到根作用域并沿途调用所有注册的侦听器。如果其中一个侦听器取消该事件,该事件将停止传播。

侦听器发出的任何异常都将传递给 $exceptionHandler 服务。

于 2016-02-01T13:43:20.137 回答