Làm cách nào để tăng chiều rộng phương thức trong Angular UI Bootstrap?


109

Tôi đang tạo một phương thức:

var modal = $modal.open({
                    templateUrl: "/partials/welcome",
                    controller: "welcomeCtrl",
                    backdrop: "static",
                    scope: $scope,
                });

có cách nào để tăng chiều rộng của nó?



1
Bạn luôn có thể thay đổi chiều rộng bằng css.
Alex Choroshin

Câu trả lời:


224

Tôi sử dụng một lớp css như vậy để nhắm mục tiêu lớp hộp thoại phương thức:

.app-modal-window .modal-dialog {
  width: 500px;
}

Sau đó, trong bộ điều khiển gọi cửa sổ phương thức, hãy đặt windowClass:

    $scope.modalButtonClick = function () {
        var modalInstance = $modal.open({
            templateUrl: 'App/Views/modalView.html',
            controller: 'modalController',
            windowClass: 'app-modal-window'
        });
        modalInstance.result.then(
            //close
            function (result) {
                var a = result;
            },
            //dismiss
            function (result) {
                var a = result;
            });
    };

6
Đây là tuyệt vời, tôi không biết nó cũng phải được áp dụng cho.modal-dialog
Jaanus

Css nên được áp dụng trên cả .app-modal-window và .modal-hộp thoại, vì vậy: .app-modal-window, .modal-hộp thoại {width: 500px; }
Alexander

2
@Alexander Không theo thử nghiệm của tôi, việc thêm chiều rộng vào phần tử mẹ của hộp thoại phương thức sẽ bắt vít tất cả.
Rob J

@RobJacobs xin lỗi, tôi không đề cập đến việc tôi sử dụng boostrap 2.3.2. Tôi đoán đây là lý do tôi nên đặt chiều rộng cho cả .app-modal-window và .modal-hộp thoại
Alexander

1
@ZeroDistraction windowClass được định nghĩa được thêm vào thuộc tính lớp phần tử trong hàm liên kết - chỉ thị modalWindow sau giai đoạn biên dịch, do đó chỉ thị 'C' không được biên dịch.
Rob J

48

Một cách dễ dàng khác là sử dụng 2 kích thước tạo sẵn và chuyển chúng dưới dạng tham số khi gọi hàm trong html của bạn. use: 'lg' cho các chế độ lớn có chiều rộng 900px 'sm' cho các chế độ nhỏ có chiều rộng 300px hoặc không truyền tham số nào, bạn sử dụng kích thước mặc định là 600px.

mã ví dụ:

$scope.openModal = function (size) {
var modal = $modal.open({
                templateUrl: "/partials/welcome",
                controller: "welcomeCtrl",
                backdrop: "static",
                scope: $scope,
                size: size,
            });
modal.result.then(
        //close
        function (result) {
            var a = result;
        },
        //dismiss
        function (result) {
            var a = result;
        });
};

và trong html, tôi sẽ sử dụng một cái gì đó như sau:

<button ng-click="openModal('lg')">open Modal</button>  

3
Tôi thấy trong hầu hết các trường hợp, kích thước tạo sẵn là tất cả những gì tôi cần. +1 để không phải thực hiện một số css tùy chỉnh!
Kilhoffer

1
hoạt động như một sự quyến rũ. Cảm ơn bạn đã làm rõ về kích thước css tích hợp hiện có.
Kings

28

Bạn có thể chỉ định chiều rộng tùy chỉnh cho lớp .modal-lg cụ thể cho cửa sổ bật lên của bạn để có độ phân giải khung nhìn rộng hơn. Đây là cách làm:

CSS:

@media (min-width: 1400px){

   .my-modal-popup .modal-lg {
       width: 1308px;
   }       

}

JS:

var modal = $modal.open({
    animation: true,
    templateUrl: 'modalTemplate.html',
    controller: 'modalController',
    size: 'lg',
    windowClass: 'my-modal-popup'
});

1
Giải pháp là tốt, nhưng với tôi thì cú pháp CSS không đúng. Tôi phải điều chỉnh css.
Jianwu Chen

12

Khi chúng tôi mở một phương thức, nó chấp nhận kích thước như một tham số:

Các giá trị có thể có cho kích thước của nó: sm, md, lg

$scope.openModal = function (size) {
var modal = $modal.open({
      size: size,
      templateUrl: "/app/user/welcome.html",
      ...... 
      });
}

HTML:

<button type="button" 
    class="btn btn-default" 
    ng-click="openModal('sm')">Small Modal</button>

<button type="button" 
    class="btn btn-default" 
    ng-click="openModal('md')">Medium Modal</button>

<button type="button" 
    class="btn btn-default" 
    ng-click="openModal('lg')">Large Modal</button>

Nếu bạn muốn có bất kỳ kích thước cụ thể nào, hãy thêm kiểu trên HTML mô hình:

<style>.modal-dialog {width: 500px;} </style>

12

có một cách khác mà bạn không phải ghi đè các lớp uibModal và sử dụng chúng nếu cần: bạn gọi hàm $ uibModal.open với kiểu kích thước của riêng bạn như "xlg" và sau đó bạn xác định một lớp có tên "modal-xlg" như bên dưới :

.modal-xlg{
   width:1200px;
}

gọi $ uibModal.open bằng:

 var modalInstance = $uibModal.open({
                ...  
                size: "xlg",
            });

và điều này sẽ hoạt động. bởi vì bất kỳ chuỗi nào bạn chuyển dưới dạng kích thước bootstrap sẽ kết hợp nó với "modal-" và điều này sẽ đóng vai trò của lớp cho cửa sổ.


3

Tôi thấy việc quản lý mẫu từ Bootstrap-ui dễ dàng hơn. Tôi vẫn giữ nguyên HTML đã nhận xét để hiển thị những gì tôi đã thay đổi.

Ghi đè mẫu mặc định của chúng:

<script type="text/ng-template" id="myDlgTemplateWrapper.html">
    <div tabindex="-1" role="dialog" class="modal fade" ng-class="{in: animate}" 
         ng-style="{'z-index': 1050 + index*10, display: 'block'}" ng-click="close($event)"> 
        <!-- <div class="modal-dialog"
            ng-class="{'modal-sm': size == 'sm', 'modal-lg': size == 'lg'}"
            >
            <div class="modal-content"  modal-transclude></div>
        </div>--> 

        <div modal-transclude>
            <!-- Your content goes here -->
        </div>
    </div>
</script>

Sửa đổi mẫu hộp thoại của bạn (lưu ý các DIV của trình bao bọc chứa lớp "phương thức-hộp thoại" và lớp "phương thức-nội dung"):

<script type="text/ng-template" id="myModalContent.html">
    <div class="modal-dialog {{extraDlgClass}}"
         style="width: {{width}}; max-width: {{maxWidth}}; min-width: {{minWidth}}; ">
        <div class="modal-content">
            <div class="modal-header bg-primary">
                <h3>I am a more flexible modal!</h3>
            </div>
            <div class="modal-body"
                 style="min-height: {{minHeight}}; height: {{height}}; max-height {{maxHeight}}; ">
                <p>Make me any size you want</p>
            </div>
            <div class="modal-footer">
                <button class="btn btn-primary" ng-click="ok()">OK</button>
                <button class="btn btn-warning" ng-click="cancel()">Cancel</button>
            </div>
        </div>
    </div>
</script>

Và sau đó gọi phương thức với bất kỳ tham số kiểu hoặc lớp CSS nào bạn muốn thay đổi (giả sử bạn đã xác định "ứng dụng" ở một nơi khác):

<script type="text/javascript">
    app.controller("myTest", ["$scope", "$modal", function ($scope, $modal)
    {
        //  Adjust these with your parameters as needed

        $scope.extraDlgClass = undefined;

        $scope.width = "70%";
        $scope.height = "200px";
        $scope.maxWidth = undefined;
        $scope.maxHeight = undefined;
        $scope.minWidth = undefined;
        $scope.minHeight = undefined;

        $scope.open = function ()
        {
            $scope.modalInstance = $modal.open(
            {
                backdrop: 'static',
                keyboard: false,
                modalFade: true,

                templateUrl: "myModalContent.html",
                windowTemplateUrl: "myDlgTemplateWrapper.html",
                scope: $scope,
                //size: size,   - overwritten by the extraDlgClass below (use 'modal-lg' or 'modal-sm' if desired)

                extraDlgClass: $scope.extraDlgClass,

                width: $scope.width,
                height: $scope.height,
                maxWidth: $scope.maxWidth,
                maxHeight: $scope.maxHeight,
                minWidth: $scope.minWidth,
                minHeight: $scope.minHeight
            });

            $scope.modalInstance.result.then(function ()
            {
                console.log('Modal closed at: ' + new Date());
            },
            function ()
            {
                console.log('Modal dismissed at: ' + new Date());
            });
        };

        $scope.ok = function ($event)
        {
            if ($event)
                $event.preventDefault();
            $scope.modalInstance.close("OK");
        };

        $scope.cancel = function ($event)
        {
            if ($event)
                $event.preventDefault();
            $scope.modalInstance.dismiss('cancel');
        };

        $scope.openFlexModal = function ()
        {
            $scope.open();
        }

    }]);
</script>

Thêm một nút "mở" và bắn đi.

    <button ng-controller="myTest" class="btn btn-default" type="button" ng-click="openFlexModal();">Open Flex Modal!</button>

Bây giờ bạn có thể thêm bất kỳ lớp bổ sung nào bạn muốn hoặc chỉ cần thay đổi kích thước chiều rộng / chiều cao nếu cần.

Tôi đã thêm nó vào trong một chỉ thị wrapper, điều này sẽ rất nhỏ từ thời điểm này trở đi.

Chúc mừng.


3

Tôi đã giải quyết sự cố bằng giải pháp Dmitry Komin, nhưng với cú pháp CSS khác để làm cho nó hoạt động trực tiếp trong trình duyệt.

CSS

@media(min-width: 1400px){
    .my-modal > .modal-lg {
        width: 1308px;
    }
}

JS cũng vậy:

var modal = $modal.open({
    animation: true,
    templateUrl: 'modalTemplate.html',
    controller: 'modalController',
    size: 'lg',
    windowClass: 'my-modal'
});

3

Bạn có thể làm điều này một cách rất đơn giản bằng cách sử dụng thuộc tính kích thước của phương thức góc.

var modal = $modal.open({
                    templateUrl: "/partials/welcome",
                    controller: "welcomeCtrl",
                    backdrop: "static",
                    scope: $scope,
                    size:'lg' // you can try different width like 'sm', 'md'
                });

1

Nếu bạn chỉ muốn sử dụng kích thước lớn mặc định, bạn có thể thêm 'modal-lg':

var modal = $modal.open({
          templateUrl: "/partials/welcome",
          controller: "welcomeCtrl",
          backdrop: "static",
          scope: $scope,
          windowClass: 'modal-lg'
});

0

Sử dụng chiều rộng tối đa trên hộp thoại phương thức cho góc 5

.mod-class .modal-dialog {
    max-width: 1000px;
}

và sử dụng windowClass như những người khác được khuyến nghị, ví dụ TS:

this.modalService.open(content, { windowClass: 'mod-class' }).result.then(
        (result) => {
            // this.closeResult = `Closed with: ${result}`;
         }, (reason) => {
            // this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
});

Ngoài ra, tôi phải đặt mã css trong global styles> styles.css.

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.