Здається, я не можу знайти спосіб викликати функцію в батьківській області зсередини директиви, не використовуючи ізольовану область. Я знаю, що якщо я використовую ізольовану область, я можу просто використовувати "&" в ізольованій, щоб отримати доступ до функції батьківської області, але використання ізольованої області, коли це не потрібно, має наслідки. Розгляньте такий HTML:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
У цьому простому прикладі я хочу показати діалогове вікно підтвердження JavaScript і викликати doIt () лише тоді, коли вони натискають "OK" у діалоговому вікні підтвердження. Це просто, використовуючи ізольований обсяг. Директива буде виглядати так:
.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 працює нормально, але, звичайно, виклик для підтвердження дії () не працює, і я не знаю, як змусити його працювати.
Зверніть увагу, відповідь, яку я справді шукаю, - це як викликати функції на зовнішній області БЕЗ використання ізольованої області. І я не зацікавлений в тому, щоб це діалогове вікно підтвердження працювало по-іншому, оскільки сенс цього питання полягає в тому, щоб зрозуміти, як здійснювати виклики до зовнішньої області, і при цьому мати можливість, щоб інші директиви працювали проти батьківської області.
Як варіант, мені було б цікаво почути рішення, які використовують ізольований обсяг, якщо інші директиви все ще будуть працювати проти батьківського обсягу , але я не думаю, що це можливо.