Làm cách nào để ngăn phương thức angle-ui đóng?


86

Tôi đang sử dụng Angular UI $ modal trong dự án của mình http://angular-ui.github.io/bootstrap/#/modal

Tôi không muốn người dùng đóng phương thức bằng cách nhấn vào phông nền. Tôi muốn một phương thức chỉ có thể được đóng bằng cách nhấn nút đóng mà tôi đã tạo.

Làm cách nào để ngăn phương thức đóng?

Câu trả lời:


193

Trong khi tạo phương thức, bạn có thể chỉ định hành vi của nó:

$modal.open({
   // ... other options
   backdrop  : 'static',
   keyboard  : false
});

2
Vâng, đây là câu trả lời chính xác :) Cảm ơn bạn đã chia sẻ nó!
skywalker

Mát mẻ! Cám ơn vì đã chia sẻ. +1
Khanh Tran

10
Có cách nào để đặt những điều này một cách động - giả sử nếu cửa sổ bật lên đang ở giữa một hoạt động không nên bị gián đoạn?
RonLugge


22

Câu hỏi cũ, nhưng nếu bạn muốn thêm hộp thoại xác nhận về các hành động đóng khác nhau, hãy thêm cái này vào bộ điều khiển phiên bản phương thức của bạn:

$scope.$on('modal.closing', function(event, reason, closed) {
    console.log('modal.closing: ' + (closed ? 'close' : 'dismiss') + '(' + reason + ')');
    var message = "You are about to leave the edit view. Uncaught reason. Are you sure?";
    switch (reason){
        // clicked outside
        case "backdrop click":
            message = "Any changes will be lost, are you sure?";
            break;

        // cancel button
        case "cancel":
            message = "Any changes will be lost, are you sure?";
            break;

        // escape key
        case "escape key press":
            message = "Any changes will be lost, are you sure?";
            break;
    }
    if (!confirm(message)) {
        event.preventDefault();
    }
});

Tôi có một nút đóng ở trên cùng bên phải của mình, nút này sẽ kích hoạt hành động "hủy". Nhấp vào phông nền (nếu được bật), kích hoạt hành động hủy. Bạn có thể sử dụng nó để sử dụng các thông điệp khác nhau cho các sự kiện gần nhau.


Nó trả lời câu hỏi của tôi như thế nào?
Rahul Prasad

Với điều này, bạn có thể chặn nếu một phương thức đã được hướng dẫn để đóng, bởi lý do của lệnh. Dựa trên đó, bạn thêm logic tùy chỉnh nếu muốn hoặc có thể nhắc người dùng xác nhận trước khi thực sự đóng phương thức.
Tiago

Như câu hỏi đã nêu, Hãy cho tôi biết một logic, điều này sẽ ngăn phương thức đóng?
Rahul Prasad

Nếu đó là tất cả những gì bạn muốn, thì chỉ cần sử dụng event.preventDefault();bên trong case "backdrop click"và quay lại để kết thúc quá trình thực thi.
Tiago

4
+1. Đây thực sự là một cách tốt hơn nhiều để ngăn phương thức đóng mà không hạn chế các tính năng (trình kích hoạt phông nền và bàn phím). Lưu ý: sự kiện được truyền phát nên phải được lắng nghe trên phạm vi uibModalInstance hoặc phạm vi hạ lưu. Kể từ 0h13
Sergej Popov

13

Đây là những gì được đề cập trong tài liệu

phông nền - kiểm soát sự hiện diện của phông nền. Các giá trị được phép: true (mặc định), false (không có phông nền), 'tĩnh' - phông nền hiện có nhưng cửa sổ phương thức không bị đóng khi nhấp vào bên ngoài cửa sổ phương thức.

static có thể làm việc.


Có tùy chọn nào để không có phông nền nào sẽ hiển thị và cửa sổ phương thức sẽ đóng lại khi nhấp vào bên ngoài cửa sổ phương thức không?

8

Định cấu hình toàn cầu,

decorator , một trong những tính năng tốt nhất của góc cạnh. cung cấp khả năng "vá" các mô-đun của bên thứ 3.

Giả sử bạn muốn hành vi này trong tất cả các $modaltham chiếu của mình và bạn không muốn thay đổi cuộc gọi của mình,

Bạn có thể viết một người trang trí . điều đó chỉ đơn giản là thêm vào các tùy chọn -{backdrop:'static', keyboard:false}

angular.module('ui.bootstrap').config(function ($provide) {
    $provide.decorator('$modal', function ($delegate) {
        var open = $delegate.open;

        $delegate.open = function (options) {
            options = angular.extend(options || {}, {
                backdrop: 'static',
                keyboard: false
            });

            return open(options);
        };
        return $delegate;
    })
});
  • Lưu ý: trong các phiên bản mới nhất, phần mềm được $modalđổi tên thành$uibModal

Bản demo trực tuyến - http://plnkr.co/edit/2MWIpOs3uAG5EFQy6Ndn?p=preview


5

đối với phiên bản mới của ngDialog (0.5.6), hãy sử dụng:

closeByEscape : false
closeByDocument : false
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.