Как вы получаете доступ к методам $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
и синтаксисом "Контроллер как", который был прикреплен к решению проблемы с обзором в представлениях.