【发布时间】:2016-02-01 13:40:22
【问题描述】:
$scope.$emit 和 $rootScope.$emit 有什么区别?
我正在使用它从指令向控制器发出指令,并且它可以双向工作!
【问题讨论】:
标签: javascript angularjs scope rootscope emit
$scope.$emit 和 $rootScope.$emit 有什么区别?
我正在使用它从指令向控制器发出指令,并且它可以双向工作!
【问题讨论】:
标签: javascript angularjs scope 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 广播,那么所有的孩子$scopes 都会听。
$emit(name, args);
通过作用域层次向上调度事件
name,通知已注册的$rootScope.Scope 侦听器。事件生命周期从调用 $emit 的范围开始。在此范围内侦听名称事件的所有侦听器都会收到通知。之后,事件向上遍历到根作用域并沿途调用所有注册的侦听器。如果其中一个侦听器取消该事件,该事件将停止传播。
从侦听器发出的任何异常都将传递给 $exceptionHandler 服务。
【讨论】:
$scope.$emit 是什么,而不是$rootScope.$emit 是什么。 $rootScope.$emit 只会让其他 $rootScope 听众捕捉到它。