Tôi dường như không thể tìm ra cách gọi một hàm trên phạm vi chính từ bên trong một chỉ thị mà không sử dụng phạm vi bị cô lập. Tôi biết rằng nếu tôi sử dụng phạm vi bị cô lập, tôi chỉ có thể sử dụng "&" trong phạm vi cô lập để truy cập hàm trên phạm vi chính, nhưng sử dụng phạm vi cô lập khi không cần thiết sẽ dẫn đến hậu quả. Hãy xem xét HTML sau:
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
Trong ví dụ đơn giản này, tôi muốn hiển thị hộp thoại xác nhận JavaScript và chỉ gọi doIt () nếu họ nhấp vào "OK" trong hộp thoại xác nhận. Điều này đơn giản bằng cách sử dụng một phạm vi bị cô lập. Chỉ thị sẽ có dạng như sau:
.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();
}
});
}
};
})
Nhưng vấn đề là, bởi vì tôi đang sử dụng phạm vi bị cô lập, ng-hide trong ví dụ trên không còn thực thi đối với phạm vi mẹ nữa , mà là trong phạm vi cô lập (vì sử dụng phạm vi cô lập trên bất kỳ chỉ thị nào khiến tất cả các chỉ thị trên phần tử đó sử dụng phạm vi cô lập). Đây là jsFiddle của ví dụ trên mà ng-hide không hoạt động. (Lưu ý rằng trong trò chơi này, nút sẽ ẩn khi bạn nhập "có" vào hộp nhập liệu.)
Giải pháp thay thế là KHÔNG sử dụng phạm vi bị cô lập , đây thực sự là điều tôi thực sự muốn ở đây vì không cần phạm vi của chỉ thị này bị cô lập. Vấn đề duy nhất tôi gặp phải là, làm cách nào để gọi một phương thức trên phạm vi chính nếu tôi không chuyển nó vào trong phạm vi cô lập ?
Đây là một jsfiddle mà tôi KHÔNG sử dụng phạm vi cô lập và ng-hide hoạt động tốt, nhưng tất nhiên, lệnh gọi xác nhận () không hoạt động và tôi không biết làm thế nào để làm cho nó hoạt động.
Xin lưu ý, câu trả lời mà tôi thực sự đang tìm kiếm là cách gọi các hàm trên phạm vi bên ngoài mà KHÔNG sử dụng phạm vi cô lập. Và tôi không quan tâm đến việc làm cho hộp thoại xác nhận này hoạt động theo cách khác, bởi vì mục đích của câu hỏi này là tìm ra cách thực hiện lệnh gọi đến phạm vi bên ngoài và vẫn có thể có các lệnh khác hoạt động đối với phạm vi chính.
Ngoài ra, tôi muốn biết về các giải pháp sử dụng phạm vi bị cô lập nếu các chỉ thị khác vẫn hoạt động chống lại phạm vi chính , nhưng tôi không nghĩ điều này là có thể.