ดูเหมือนฉันจะไม่พบวิธีเรียกใช้ฟังก์ชันในขอบเขตหลักจากภายในคำสั่งโดยไม่ใช้ขอบเขตแยก ฉันรู้ว่าถ้าฉันใช้ขอบเขตแยกฉันสามารถใช้ "&" ในการแยกเพื่อเข้าถึงฟังก์ชันในขอบเขตหลัก แต่การใช้ขอบเขตที่แยกเมื่อไม่จำเป็นจะมีผล พิจารณา 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 () ไม่ทำงานและฉันไม่รู้ว่าจะทำให้มันใช้งานได้อย่างไร
โปรดทราบว่าคำตอบที่ฉันกำลังมองหาคือวิธีการเรียกใช้ฟังก์ชันในขอบเขตภายนอกโดยไม่ต้องใช้ขอบเขตแยก และฉันไม่สนใจที่จะทำให้กล่องโต้ตอบยืนยันนี้ใช้งานได้ในทางอื่นเพราะประเด็นของคำถามนี้คือการหาวิธีโทรออกไปยังขอบเขตภายนอกและยังคงสามารถมีคำสั่งอื่น ๆ ที่ต่อต้านขอบเขตหลักได้
อีกวิธีหนึ่งฉันสนใจที่จะได้ยินวิธีแก้ปัญหาที่ใช้ขอบเขตแยกหากคำสั่งอื่น ๆ ยังคงใช้งานได้กับขอบเขตหลักแต่ฉันไม่คิดว่าจะเป็นไปได้