У меня есть элемент директивы с шаблоном. Шаблон директивы содержит кнопку с ng-click для вызова функции в контроллере. Когда кнопка нажата, контроллер передает событие, и директивы ищут трансляцию. Это отлично работает, однако, я получаю предупреждение для каждого элемента директивы, который используется в приложении. Я просто хочу, чтобы трансляция прослушивалась с помощью элемента директивы, используемого для нажатия кнопки.Множественные элементы управления AngularJS с шаблоном и трансляцией от контроллера
Как я могу выделить адресные клики для каждого экземпляра? Я пробовал много директивных областей, но я не мог найти решение. И, это лучшее решение для использования для этой цели?
Я создал скрипку здесь: http://jsfiddle.net/mLnspea0/
var app = angular.module('testApp', []);
app.controller('SaveCtrl', function ($scope) {
$scope.save = function() {
$scope.$broadcast('saved');
};
});
app.directive('saveButton', function() {
return {
restrict: 'E',
template: '<div class="container"><button ng-click="save()">Save</button></div>',
link: function (scope, element, attr) {
scope.$on('saved', function() {
alert('saved');
});
}
}
});
Спасибо за любую помощь.
Кажется мне, что вы получили его назад. Директиве не нужно знать, как реагировать на действие сохранения. Что произойдет, если мы хотим повторно использовать директиву в другом контексте, который сохраняет данные по-другому? Лучше я думаю, чтобы определить функцию сохранения в контроллере и ввести ее в директиву. – jdp
Хм .. Я думаю, что это зависит от более широкого использования здесь и не уверен, что между нашими решениями существуют большие различия. Он определяет событие click в директиве. Теоретически контроллер ничего не знает о том, как это обрабатывается. Ваше решение также работает, но оно ценно, если контроллер * нуждается в *, чтобы узнать о том, что было уволено/как справиться с сохранением. Я интерпретировал оригинальный вопрос OP как просто желающий уведомить остальную часть приложения о том, что что-то произошло. Я также инстинктивно использовал бы привязку стиля «&», но не уверен, что это важно при просмотре вашей скрипки. – Daniel
Думаю, я должен был объяснить, почему я хотел использовать директиву. Я использую jQuery для отображения и скрытия сохраненного предупреждения. Прямо сейчас jQuery находится в контроллере, и я хотел переместить его в директиву. – Rob