Nie mogę znaleźć sposobu na wywołanie funkcji z zakresu nadrzędnego z poziomu dyrektywy bez użycia zakresu izolowanego. Wiem, że jeśli używam zakresu izolowanego, mogę po prostu użyć „&” w izolowanym, aby uzyskać dostęp do funkcji w zakresie nadrzędnym, ale użycie zakresu izolowanego, gdy nie jest to konieczne, ma konsekwencje. Rozważ następujący kod HTML:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
W tym prostym przykładzie chcę wyświetlić okno dialogowe potwierdzenia JavaScript i wywołać funkcję doIt () tylko wtedy, gdy klikną „OK” w oknie dialogowym potwierdzenia. Jest to proste przy użyciu izolowanego zakresu. Dyrektywa wyglądałaby następująco:
.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();
}
});
}
};
})
Ale problem polega na tym, że ponieważ używam zakresu izolowanego, ng-hide w powyższym przykładzie nie jest już wykonywany względem zakresu nadrzędnego , ale raczej w zakresie izolowanym (ponieważ użycie zakresu izolowanego w dowolnej dyrektywie powoduje, że wszystkie dyrektywy tego elementu użyć izolowanego zakresu). Oto jsFiddle z powyższego przykładu, w którym ng-hide nie działa. (Zauważ, że w tych skrzypcach przycisk powinien się ukryć po wpisaniu „tak” w polu wprowadzania).
Alternatywą byłoby NIE stosowanie izolowanego zakresu , czego tak naprawdę tutaj chcę, ponieważ nie ma potrzeby izolowania zakresu tej dyrektywy. Jedyny problem, jaki mam, polega na tym , jak wywołać metodę w zakresie nadrzędnym, jeśli nie przekażę jej w zakresie izolowanym ?
Oto jsfiddle, w którym NIE używam izolowanego zasięgu, a ng-hide działa dobrze, ale oczywiście wywołanie confirmAction () nie działa i nie wiem, jak to zrobić.
Proszę zauważyć, że odpowiedź, której naprawdę szukam, to wywoływanie funkcji w zakresie zewnętrznym BEZ stosowania zakresu izolowanego. I nie jestem zainteresowany, aby ten dialog potwierdzający działał w inny sposób, ponieważ celem tego pytania jest ustalenie, jak wywoływać zakres zewnętrzny i nadal być w stanie sprawić, by inne dyrektywy działały przeciwko zakresowi nadrzędnemu.
Ewentualnie chciałbym usłyszeć o rozwiązaniach wykorzystujących zakres izolowany, jeśli inne dyrektywy będą nadal działać przeciwko zakresowi nadrzędnemu , ale nie sądzę, aby było to możliwe.