Я не могу найти способ вызвать функцию в родительской области из директивы без использования изолированной области. Я знаю, что если я использую изолированный объем, я могу просто использовать "&". в изолированном доступе к функции в родительской области, но с использованием изолированной области, когда это не является необходимым, имеет последствия. Рассмотрим следующий HTML:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
В этом простом примере я хочу показать диалоговое окно подтверждения JavaScript и только вызвать doIt(), если они нажмут "ОК" в диалоговом окне подтверждения. Это просто, используя изолированную область. Директива будет выглядеть так:
.directive('confirm', function () {
return {
restrict: 'A',
scope: {
confirm: '@',
confirmAction: '&'
},
link: function (scope, element, attrs) {
element.bind('click', function (e) {
if (confirm(scope.confirm)) {
scope.confirmAction();
}
});
}
};
})
Но проблема в том, что, поскольку я использую изолированную область видимости, ng-hide в приведенном выше примере больше не выполняется против родительской области, а скорее в изолированной области (поскольку использование изолированной области по любой директиве, все директивы этого элемента используют изолированный объем). Ниже приведен пример jsFiddle, где ng-hide не работает. (Обратите внимание, что в этом скрипте кнопка должна скрываться при вводе "да" в поле ввода.)
Альтернативой может быть НЕ использовать изолированную область, которая на самом деле является тем, что я действительно хочу здесь, так как нет необходимости выделять эту область действия. Единственная проблема, с которой я столкнулся, - , как я могу вызвать метод в родительской области, если я не передаю его в изолированной области?
Вот jsfiddle, где я НЕ использую изолированную область, и ng-hide работает нормально, но, конечно, вызов confirmAction() не работает, и я не знаю, как заставить его работать.
Обратите внимание, что я действительно ищу, как вызвать функции во внешнем пространстве БЕЗ использования изолированной области. И мне не интересно, чтобы это подтвердило работу диалога по-другому, потому что суть этого вопроса состоит в том, чтобы выяснить, как совершать вызовы внешней области и по-прежнему иметь возможность работать с другими директивами в отношении родительской области.
В качестве альтернативы мне было бы интересно узнать о решениях, которые используют изолированную область действия, если другие директивы будут по-прежнему работать против родительской области, но я не думаю, что это возможно.