Saya tidak bisa menemukan cara untuk memanggil fungsi pada lingkup induk dari dalam direktif tanpa menggunakan lingkup terisolasi. Saya tahu bahwa jika saya menggunakan lingkup terisolasi saya hanya dapat menggunakan "&" dalam lingkup terisolasi untuk mengakses fungsi pada lingkup induk, tetapi menggunakan lingkup terisolasi ketika tidak diperlukan memiliki konsekuensi. Perhatikan HTML berikut ini:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
Dalam contoh sederhana ini, saya ingin menampilkan dialog konfirmasi JavaScript dan hanya memanggil doIt () jika mereka mengklik "OK" di dialog konfirmasi. Ini sederhana menggunakan ruang lingkup terisolasi. Arahannya akan terlihat seperti ini:
.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();
}
});
}
};
})
Tapi masalahnya, karena saya menggunakan scope terisolir, ng-hide dalam contoh di atas tidak lagi dieksekusi terhadap lingkup induk , melainkan dalam lingkup terisolir (karena menggunakan lingkup terisolir pada sembarang direktif menyebabkan semua arahan pada elemen itu menjadi menggunakan ruang lingkup terisolasi). Berikut adalah jsFiddle dari contoh di atas di mana ng-hide tidak berfungsi. (Perhatikan bahwa di biola ini, tombolnya harus bersembunyi saat Anda mengetik "ya" di kotak masukan.)
Alternatifnya adalah TIDAK menggunakan cakupan yang terisolasi , yang sebenarnya adalah apa yang saya inginkan di sini karena tidak perlu ruang lingkup arahan ini untuk diisolasi. Satu-satunya masalah yang saya miliki adalah, bagaimana cara memanggil metode pada lingkup induk jika saya tidak meneruskannya pada lingkup yang terisolasi ?
Berikut adalah jsfiddle di mana saya TIDAK menggunakan scope terisolasi dan ng-hide berfungsi dengan baik, tetapi, tentu saja, panggilan ke confirmAction () tidak berfungsi, dan saya tidak tahu cara membuatnya berfungsi.
Harap dicatat, jawaban yang benar-benar saya cari adalah bagaimana memanggil fungsi di lingkup luar TANPA menggunakan lingkup terisolasi. Dan saya tidak tertarik untuk membuat dialog konfirmasi ini berfungsi dengan cara lain, karena inti dari pertanyaan ini adalah untuk mencari tahu cara melakukan panggilan ke lingkup luar dan masih dapat membuat perintah lain bekerja melawan lingkup induk.
Atau, saya akan tertarik untuk mendengar solusi yang menggunakan lingkup terisolasi jika arahan lain masih akan bekerja melawan lingkup induk , tetapi saya rasa ini tidak mungkin.