Закрытие uibModal автоматически после того, как длина массива равна нулю - PullRequest
0 голосов
/ 24 января 2020

Наша команда разрабатывает виджет вложений в ServiceNow. Виджет позволяет пользователю прикреплять документы, просматривать их и удалять их по мере необходимости. Для просмотра вложений мы используем модальный windows через uibModal. Если пользователь удаляет все вложения и длина массива достигает нуля, мы хотим, чтобы модальное окно закрывалось автоматически, но мы не можем заставить это работать.

<label>
  <sp-attachment-button></sp-attachment-button>
</label>

<span ng-if="attachments.length>0" class="badge" ng-click="c.openModal()">{{attachments.length}}</span>

<script type="text/ng-template" id="modalTemplate">
 <div class="panel panel-default">
   <div class="panel-heading flex">
     <h4 class="panel-title">Attachments</h4>
     <i type="button" class="fa fa-times" style="margin-left:auto;" ng-click="c.closeModal()"></i>
   </div>
   <div class="panel-body">
     <now-attachments-list template="sp_attachment_single_line"></now-attachments-list>
   </div>
   <!--<div class="panel-footer text-right">
     <button class="btn btn-primary" ng-click="c.closeModal()">${Close Modal}</button>
   </div>-->
 </div>
</script>

Наш контроллер выглядит следующим образом:

function ($uibModal, spModal, cabrillo, $scope, $http, spUtil, nowAttachmentHandler, $rootScope, $sanitize, $window, $sce) {
    var c = this;
    $scope.attachments=[];
    $scope.m = $scope.data.msgs;
    $scope.submitButtonMsg = $scope.m.submitMsg;

    if(c.options.case_sysid){
        $scope.data._attachmentGUID = c.options.case_sysid;
    }
    var ah = $scope.attachmentHandler = new nowAttachmentHandler(setAttachments, function() {});
    ah.setParams('sn_hr_core_case_workforce_admin', $scope.data._attachmentGUID, 1024 * 1024 * 24);
    function setAttachments(attachments, action) {
        $scope.attachments = attachments;
    }
    $scope.attachmentHandler.getAttachmentList();

    $scope.confirmDeleteAttachment = function(attachment) {
        if (cabrillo.isNative()) {
            if (confirm($scope.data.msgs.delete_attachment)) {
                $scope.attachmentHandler.deleteAttachment(attachment);
            }           
        } else {
            spModal.confirm($scope.data.msgs.delete_attachment).then(function() {
                $scope.attachmentHandler.deleteAttachment(attachment);
                if($scope.attachments.length==0){
                    c.modalInstance.close();
                }
            });
        }
    }

    c.openModal = function() {
        c.modalInstance = $uibModal.open({
            templateUrl: 'modalTemplate',
            scope: $scope
        });
    }

    c.closeModal = function() {
        c.modalInstance.close();
    }

    console.log('custom-attachments');
    console.log($scope);
}

Любые предложения о том, как заставить модал автоматически закрываться?

1 Ответ

1 голос
/ 24 января 2020

Мы поняли это. Мы должны посмотреть массив, затем закрыть модальное после того, как массив достигнет нуля:

$scope.$watch(function () {  
    return $scope.attachments;
}, function (value) {  
    if(value.length==0){
        if(c.modalInstance){
            c.modalInstance.close();
        }
    }
});  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...