【问题标题】:What is difference between $scope.$emit and $rootScope.$emit?$scope.$emit 和 $rootScope.$emit 有什么区别?
【发布时间】:2016-02-01 13:40:22
【问题描述】:

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

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

【问题讨论】:

标签: javascript angularjs scope rootscope emit


【解决方案1】:

$scope.$emit 允许当前作用域和父作用域(包括 rootScope)监听事件。

$rootScope.$emit 只允许 rootScope 监听特定事件。

【讨论】:

    【解决方案2】:

    $scope.$emit 在您希望 $scope 及其所有父级和 $rootScope 能够听到事件时很有用。 $scope.$emit 是一个对父母抱怨的孩子$scope

    还有

    $rootScope.$emit 只允许其他$rootScope 监听器捕获它。当您不想通知每个$scope 时,这很有用。

    【讨论】:

      【解决方案3】:

      $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 听众捕捉到它。
      • @ste2425 以前没想过,但是好像无效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多