Как вы получаете доступ к методам $on, $emit, $broadcast с контроллером в качестве синтаксиса?

С помощью $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);
    }

})();

Как вы можете получить доступ к наблюдателям с контроллером как синтаксис?

Ответы

Ответ 1

Чтобы использовать все, что существует на $scope, вы должны ввести $scope. К сожалению, это просто, что является недостатком синтаксиса "как".

Однако хорошая новость заключается в том, что ввод $scope рядом с this не меняет функции контроллера как функции синтаксиса, он просто дает вам доступ ко всему управлению событиями, которое живет на $scope.

Стоит отметить, что это одна из основных причин того, что приходит в Angular 2.0... есть реальная проблема и расхождение между $scope и синтаксисом "Контроллер как", который был прикреплен к решению проблемы с обзором в представлениях.