当前位置: 首页 > 面试题库 >

如何使用Controller作为语法访问$ on,$ emit,$ broadcast方法?

周宏伯
2023-03-14
问题内容

使用$scope它很容易发出事件或注意事件。

(function() {
    "use strict";

    angular
        .module("app")
        .controller("Ctrl", [
            "$scope",
            CtrlDefinition
        ]);

    function CtrlDefinition($scope) {
        $scope.$on("change", listenForChange);

        function listenForChange(data) {
            //do something
        }
    }
})();

但是,如果我尝试使用var vm = this语法,我警告说$on$emit$broadcast不是的方法this。如何访问它们?我还需要注入$scope控制器定义吗?

(function() {
    "use strict";

    angular
        .module("app")
        .controller("Ctrl", CtrlDefinition);

    function CtrlDefinition() {
        var vm = this;
        vm.$on("change", listenForChange); //$on is not a method of vm
    }

})();

您可以做这样的事情,但是它不会破坏根本不用的目的$scope吗?

(function() {
    "use strict";

    angular
        .module("app")
        .controller("Ctrl", [
            "$scope",
            CtrlDefinition
        ]);

    function CtrlDefinition($scope) {
        var vm = this;
        vm.scope = $scope;
        vm.scope.$on("change", listenForChange);
    }

})();

如何使用控制器作为语法访问观察者?


问题答案:

为了使用存在的任何东西$scope,您不得不注入$scope。不幸的是,它很简单,这是“ as”语法的缺点。

不过,好消息是,$scope与之一起注入this不会改变控制器作为语法的功能,它只是使您能够访问存在于上的所有事件管理 $scope

值得注意的是,这是Angular 2.0中出现问题的主要原因之一…之间存在一个真正的问题和差异,$scope而用来解决视图范围问题的“
Controller as”语法也是如此。



 类似资料:
  • 问题内容: 我了解,并且 用于在一个控制器中引发事件并在另一个控制器中进行处理。如果可能的话,有人可以直接给我一些有关上述三种用法的实时示例吗? 我通过以下链接了解了基本用法。 http://www.binaryintellect.net/articles/5d8be0b6-e294-457e-82b0-ba7cc10cae0e.aspx 问题答案: $ emit 它通过作用域层次结构向上调度事件

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

  • @notblank、@min和@valid注释来自以下依赖项: 如何使@Validated控制器中的@Validated工作在Person请求体上?

  • 如何使用和方法将对象从一个控制器发送到另一个控制器? 它的工作方式并不像我想的那样。和如何工作?

  • 问题内容: 使用定义控制器的原始方法 ,访问父级的作用域非常简单,因为子级作用域原型继承自其父级。 Controller-As方法 似乎是声明控制器的推荐方法。但是,对于Controller-A,上述方法不再有效。 当然,我可以通过View 访问父作用域: 我确实有一些问题(意大利面条代码可能存在),但是这个问题是关于从子控制器访问父作用域的。 我看到此工作的唯一方法是: 因此,现在,子控制器需要

  • 本文向大家介绍Angularjs中的事件广播 —全面解析$broadcast,$emit,$on,包括了Angularjs中的事件广播 —全面解析$broadcast,$emit,$on的使用技巧和注意事项,需要的朋友参考一下 Angularjs中不同作用域之间可以通过组合使用$broadcast,$emit,$on的事件广播机制来进行通信 介绍: $broadcast的作用是将事件从父级作用域传