Javascript $scope.$emit和$rootScope.$emit之间的区别是什么?
$scope.$emit和$rootScope.$emit之间的区别是什么 我用它从一个指令发射到控制器,它是双向工作的Javascript $scope.$emit和$rootScope.$emit之间的区别是什么?,javascript,angularjs,scope,rootscope,emit,Javascript,Angularjs,Scope,Rootscope,Emit,$scope.$emit和$rootScope.$emit之间的区别是什么 我用它从一个指令发射到控制器,它是双向工作的 $emit()将更改发送到链中向上的其父作用域 因此,当您执行$scope.$emit操作时,您正在向父作用域发送通知,父作用域可能是另一个$scope,也可能是$rootScope 它的工作原理基本上类似于childScope>parentScope 它的反面是.broadcast() .broadcast()将更改广播到子作用域。因此,如果您从$rootScope进行广播
$emit()
将更改发送到链中向上的其父作用域
因此,当您执行$scope.$emit
操作时,您正在向父作用域发送通知,父作用域可能是另一个$scope
,也可能是$rootScope
它的工作原理基本上类似于
childScope>parentScope
它的反面是.broadcast()
.broadcast()
将更改广播到子作用域。因此,如果您从$rootScope
进行广播,则所有子$scope
都会收听
从文档中: $emit(名称,args); 通过作用域层次结构向上发送事件
名称
,通知已注册的$rootScope.scope侦听器。
事件生命周期从调用$emit的作用域开始。侦听此作用域上的name事件的所有侦听器都会收到通知。之后,事件向上遍历根作用域,并沿途调用所有注册的侦听器。如果某个侦听器取消该事件,则该事件将停止传播
从侦听器发出的任何异常都将传递到$exceptionHandler服务
$scope.$emit
在希望$scope
及其所有父级和$rootScope
能够听到事件时非常有用$scope.$emit
是一个向父母抱怨的孩子$scope
及
$rootScope.$emit
仅允许其他$rootScope
侦听器捕获它。这在您不想通知每个$scope
时非常有用 $scope.$emit
允许当前作用域和父级(包括根作用域)侦听事件
$rootScope.$emit
仅允许rootScope侦听特定事件。这很好地解释了$scope.$emit
是什么,但不是$rootScope.$emit
是什么$rootScope.$emit
只会让其他$rootScope
侦听器捕获它。@ste2425以前从未想过它,但它似乎无效。