Я хочу отправить событие из моего контроллера представления в директиву (я хотел бы запрограммировать общий предупреждающий ящик, который может получать предупреждения через событие контроллера внешнего вида). Я сделал следующее:angular Отправить событие в директиву
В моем шаблоне вида я добавил директиву:
HTML шаблон зрения:
<alert-box></alert-box>
в контроллере представления:
$scope.$broadcast('add-alert', {type: 'danger', msg: message});
Моя директива:
.directive(
'alert-box', [function() {
return {
restrict: 'E',
templateUrl: '/directives/alert-box.html',
scope: false,
controller: [
"$scope",
function ($scope) {
$scope.alerts = [];
$scope.$on('add-alert', function(event, arg) {
$scope.addAlert(arg);
});
$scope.addAlert = function (alert) {
$scope.alerts = [];
$scope.alerts.push(alert);
};
$scope.closeAlert = function (index) {
$scope.alerts.splice(index, 1);
};
}]
}
}
]);
Согласно документам, вы должны объявить scope: false
так, чтобы вы наследовали область видимости из области внешнего контроллера. Поскольку я использую $ broadcast, который должен распространять событие вниз по hirachy, я бы за исключением этого, чтобы работать, но это не так. Моя единственная мысль, что контроллер внутри директивы всегда создает изолированную область видимости. (?)
Ваша директива должна быть названа 'alertBox' не' alert-box' inorder, чтобы иметь возможность использовать ее в представлении как 'alert-box'. Названия директив должны следовать за концом подвески верблюда. Маркировка для закрытия как опечатка. И посмотрите на это [работа здесь] (http://plnkr.co/edit/55cWtBVpD547XvCugjRN?p=preview) – PSL
@PSL Я знаю, что вы не должны сказать спасибо на SO в комментариях, так что ... да, я просто пропустил это. ..) -: – morpheus05