Кажется, я не могу найти способ вызвать функцию в родительской области из директивы без использования изолированной области. Я знаю, что если я использую изолированную область видимости, я могу просто использовать «&» в изолированной области для доступа к функции в родительской области, но использование изолированной области, когда в этом нет необходимости, имеет последствия. Рассмотрим следующий 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 () не работает, и я не знаю, как заставить его работать.
Обратите внимание, что я действительно ищу ответ, как вызывать функции во внешней области БЕЗ использования изолированной области. И я не заинтересован в том, чтобы этот диалог подтверждения работал по-другому, потому что суть этого вопроса состоит в том, чтобы выяснить, как выполнять вызовы во внешнюю область видимости и при этом иметь возможность работать с другими директивами против родительской области.
В качестве альтернативы мне было бы интересно услышать о решениях, использующих изолированную область видимости, если другие директивы по-прежнему будут работать против родительской области , но я не думаю, что это возможно.