бутстрап модальный не закрытый угловой js - PullRequest
0 голосов
/ 17 июня 2019

Я использую модальное диалоговое окно начальной загрузки UI с угловым js. Модал успешно загружен. Но когда я нажимаю кнопку «ДА / НЕТ», выдается сообщение, и модальное окно не закрывается.

Ошибка говорит: «$ uibModal.close не является функцией».

.directive('confirm', function(ConfirmService) {
    return {
        restrict: 'A',
        scope: {
            eventHandler: '&ngClick'
        },
        link: function(scope, element, attrs){
            element.unbind("click");
            element.bind("click", function(e) {
                ConfirmService.open(attrs.confirm, scope.eventHandler);
            });
        }
    }
})

Это мой сервис

.service('ConfirmService', function($uibModal) {
    var service = {};
    service.open = function (text, onOk) {
        var modalInstance = $uibModal.open({
            templateUrl: 'modules/confirmation-box/confirmation-box.html',
            controller: 'userListCtrl',
            resolve: {
                text: function () {
                    return text;
                }
            }
        });

        modalInstance.result.then(function (selectedItem) {
            onOk();
        }, function () {
        });
    };

    return service;
})

Это мой файл контроллера. Я пытаюсь нажать кнопку да / нет внутри контроллера

.controller('userListCtrl',
  ['$scope','$http','appConfig','$uibModalInstance', '$uibModal','$log','alertService',
  function ($scope,$http, appConfig,$uibModalInstance, $uibModal,$log,alertService) {

    $scope.ok = function () {
        $uibModalInstance.close();
    };

    $scope.cancel = function () {
        $uibModalInstance.dismiss('cancel');
    };    

}]);

1 Ответ

0 голосов
/ 17 июня 2019

Вы пытаетесь использовать два метода использования одновременно.Есть два (возможно, больше), которые вы можете использовать $ uibModal, но вот два, которые, я полагаю, вы смешиваете:

1) Сервис контролирует модальный режим и возвращает обещание, я считаю, что это то, чтоЯ думаю, что ты делаешь.Вам не нужно вызывать close / dismiss вручную в этом случае.Вы можете внести следующие изменения:

service.open = function(text, onOK) {
    var modalInstance = $uibModal.open({
        templateUrl: 'modules/confirmation-box/confirmation-box.html',
        controller: 'userListCtrl',
        resolve: {
            text: function () {
                return text;
            }
        }
    });

    // Return so you can chain .then just in case.  Generally we don't even 
    // do this, we just return the instance itself and allow the controller to
    // decide how to handle results/rejections
    return modalInstance.result;
}

В вашем файле шаблона у вас будет что-то вроде:

<button type="button" ng-click="$close(selectedItem)"></button>
<button type="button" ng-click="$dismiss(readon)"></button>

2) Если вы хотите использовать метод close напрямую, тогда вынужно только изменить службу на:

...
return $uibModal.open({});

, затем в вашем контроллере:

var modal = service.open('confirm');
modal.result.then(...)
modal.close()

Редактировать - обновлено с изменением на op, чтобы удалить антипаттерн согласнопредложение georgeawg.

...