当前位置: 首页 > 知识库问答 >
问题:

使用$scope.$emit和$scope.$on

蒋寒
2023-03-14

如何使用.$emit.$on方法将$scope对象从一个控制器发送到另一个控制器?

function firstCtrl($scope) {
    $scope.$emit('someEvent', [1,2,3]);
}

function secondCtrl($scope) {
    $scope.$on('someEvent', function(mass) { console.log(mass); });
}

它的工作方式并不像我想的那样。$emit$on如何工作?

共有2个答案

於宏大
2023-03-14

另外,我将建议第四个选项,作为@zbynour提出的选项的更好的替代方案。

使用$rootscope.$emit而不是$rootscope.$broadcast,而不考虑传输控制器和接收控制器之间的关系。这样,事件就会保留在$rootscope.$$listeners的集合中,而使用$rootscope.$broadcast时,事件会传播到所有子作用域,其中大多数可能都不是该事件的侦听器。当然,在接收控制器端,您只需使用$rootscope.$on

对于此选项,您必须记住销毁控制器的rootScope侦听器:

var unbindEventHandler = $rootScope.$on('myEvent', myHandler);
$scope.$on('$destroy', function () {
  unbindEventHandler();
});
逄俊贤
2023-03-14

首先,父子范围关系确实重要。您有两种可能发出某些事件:

  • $broadcast--将事件向下分配到所有子作用域,
  • $emit--通过作用域层次结构向上分派事件。

我对您的控制器(作用域)关系一无所知,但有几个选项:

>

  • 如果FirstCtrl的作用域是SecondCtrl作用域的父级,则您的代码应通过将$emit替换为FirstCtrl中的$broadcast来工作:

    function firstCtrl($scope)
    {
        $scope.$broadcast('someEvent', [1,2,3]);
    }
    
    function secondCtrl($scope)
    {
        $scope.$on('someEvent', function(event, mass) { console.log(mass); });
    }
    

    如果作用域之间没有父子关系,可以将$rootscope注入控制器,并将事件广播到所有子作用域(也就是secondctrl)。

    function firstCtrl($rootScope)
    {
        $rootScope.$broadcast('someEvent', [1,2,3]);
    }
    

    最后,当您需要将事件从子控制器调度到向上的作用域时,您可以使用$scope.$emit。如果FirstCtrl的作用域是SecondCtrl作用域的父级:

    function firstCtrl($scope)
    {
        $scope.$on('someEvent', function(event, data) { console.log(data); });
    }
    
    function secondCtrl($scope)
    {
        $scope.$emit('someEvent', [1,2,3]);
    }
    

  •  类似资料:
    • 问题内容: 如何使用和方法将对象从一个控制器发送到另一个控制器? 它不按我认为的方式工作。如何做和工作? 问题答案: 首先,父子范围关系确实很重要。你有两种可能性发出某些事件: -将事件向下分发到所有子范围, -通过范围层次结构向上调度事件。 我对你的控制器(作用域)关系一无所知,但是有几种选择: 如果scope of 是作用域的父级,则你的代码应通过替换为来工作: 如果你的范围之间没有父子关系,

    • 问题内容: 现在,之间的性能差异和已被淘汰,没有任何理由,更喜欢到? 他们是不同的,是的。 仅限于范围层次结构(向上)-如果它适合您的设计,这可能很好,但是在我看来,这是一个相当随意的限制。 在所有 选择 收听此活动的人中都有效,这在我看来是一个更为明智的限制。 我想念什么吗? 编辑: 为了对回答做出澄清,调度的方向不是我要解决的问题。向上调度事件,-向下调度事件。但是,为什么不总是使用它来覆盖所

    • 问题内容: 我不知道如何使用和。官方文档没有帮助。 我不明白的是: 他们连接到DOM吗? 如何更新对模型的DOM更改? 它们之间的连接点是什么? 我尝试了本教程,但这需要对它的理解并且理所当然。 做什么和做什么,以及如何正确使用它们? 问题答案: 您需要了解AngularJS的工作原理才能理解它。 消化周期和作用域 首先,AngularJS定义了所谓的 摘要循环 的概念。这个周期可以看作是一个循环

    • 本文向大家介绍vue template中slot-scope/scope的使用方法,包括了vue template中slot-scope/scope的使用方法的使用技巧和注意事项,需要的朋友参考一下 在vue 2.5.0+ 中slot-scope替代了 scope template 的使用情形为,我们已经封装好一个组建,预留了插槽,使用 的插槽 首先 我们的创建一个组建 组建很简单有一个 slot

    • 描述 (Description) 变量范围指定可用变量的位置。 将从本地范围搜索变量,如果它们不可用,则编译器将从父范围进行搜索。 例子 (Example) 以下示例演示了在LESS文件中使用命名空间和访问器 - <html> <head> <title>Less Scope</title> <link rel = "stylesheet" type = "text/

    • Target Scope The target scope configuration lets you tell Burp, at a suite-wide level, exactly what hosts and URLs constitute the target for your current work. You can think of the target scope as, ro