модальная служба начальной загрузки angular не работает

#html #angularjs #twitter-bootstrap #angular-ui-bootstrap #bootstrap-modal

#HTML #angularjs #twitter-bootstrap #angular-ui-bootstrap #bootstrap-модальный

Вопрос:

Я создал общую модальную службу в своем приложении. Но это как-то не работает. В этом плунжере отсутствует какая-то мелочь, но я не могу понять.

На основе переданного параметра либо откроется диалоговое окно с ошибкой, либо диалоговое окно отмены.

Найти PLUNKER здесь

Вот JS

     // create angular app
var validationApp = angular.module('validationApp', ['ui.bootstrap']);

// create angular controller
validationApp.controller('mainController', function($scope, ModalService) {

  var vm = this;
  // function to submit the form after all validation has occurred          
  vm.submitForm = function() {


    // check to make sure the form is completely valid
    if ($scope.userForm.$valid) {
      alert('our form is amazing');
    }

  };

  function openDialog() {
    alert('why am not showing');
    ModalService.openModal('Analysis Error', 'Complete Application Group configuration prior to running analysis.', 'Error');
  }

});
//controller fot dialog
validationApp.controller('ErrorDialogCtrl',
  function($uibModalInstance, message, title, callback) {
    alert('sfdsfds');
    var vm = this;
    vm.message = message;
    vm.onOk = onOk;
    vm.onContinue = onContinue;
    vm.onDiscard = onDiscard;
    vm.callback = callback;
    vm.title = title;

    function onOk() {
      $uibModalInstance.close();
    }

    function onContinue() {
      $uibModalInstance.close();
    }

    function onDiscard() {
      vm.callback();
      $uibModalInstance.close();
    }
  });
// common modal service
validationApp.service('ModalService',
  function($uibModal) {

    return {
      openModal: openModal
    };

    function openErrorModal(title, message, callback) {
      $uibModal.open({
        templateUrl: 'ErrorDialog.html',
        controller: 'ErrorDialogCtrl',
        controllerAs: 'vm',
        backdrop: 'static',
        size: 'md',
        resolve: {
          message: function() {
            return message;
          },
          title: function() {
            return title;
          },
          callback: function() {
            return callback;
          }
        }
      });
    }

    function openCancelModal(title, message, callback) {
      $uibModal.open({
        templateUrl: 'CancelDialog.html',
        controller: 'ErrorDialogCtrl',
        controllerAs: 'vm',
        backdrop: 'static',
        size: 'md',
        resolve: {
          message: function() {
            return message;
          },
          title: function() {
            return title;
          },
          callback: function() {
            return callback;
          }
        }
      });
    }

    function openModal(title, message, modalType, callback) {
      if (modalType === "Error") {
        openErrorModal(title, message, callback);
      } else {
        openCancelModal(title, message, callback);
      }
    }
  }
);
 

Открытие диалогового окна в HTML

 <div class="col-sm-6">
  <button type="submit" class="btn btn-primary" ng-click="openCancelDialog()">Open Cancel Dialog</button>
  <button type="submit" class="btn btn-primary" ng-click="openErrorDialog()">Open Error Dialog</button>
 </div>
 

Отменить диалог HTML

 <div>
    <div class="modal-header">
        <h3 class="modal-title">{{vm.title}}</h3>
    </div>
    <div class="modal-body">
        <p ng-bind-html="vm.message"></p>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" ng-click="vm.onContinue()" id="continue">Continue</button>
        <button class="btn btn-primary" ng-click="vm.onDiscard()" id="discard">Discard</button>
    </div>
</div>
 

Ошибка diaog HTML

 <div>
    <div class="modal-header">
        <h3 class="modal-title">{{vm.title}}</h3>
    </div>
    <div class="modal-body">
        <p ng-bind-html="vm.message"></p>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" ng-click="vm.onOk()">ok</button>
    </div>
</div>
 

Ответ №1:

ошибка в вашем js-файле, вам нужно объявить функцию, как показано ниже. вы просто копируете этот код и помещаете его в свой файл, тогда он будет работать нормально.

ПРИМЕЧАНИЕ: не ModalService.ShowModal, он должен быть ModalService.openModal
проверьте свой код здесь

 $scope.openCancelDialog = function() {
alert('why am not showing CAncel');
ModalService.openModal('Analysis Error', 'I am Error Type', 'Error');

}


$scope.openErrorDialog = function() {
console.log('why am not showing Error');
ModalService.openModal('Analysis Error', 'I am cancel Type', 'Cancel');
}
 

Комментарии:

1. это не часть этого вопроса, но можете ли вы помочь мне в модульном тестировании модальных служб и ErrorController?

2. Конечно, скажите мне, как я могу вам помочь

3. Я новичок в модульном тестировании, не уверен, как запустить модульный тест для этого ModalService и Errorcontroller. Если вы можете показать мне путь, покрыв UT, я наверстаю упущенное.

4. не могли бы вы, пожалуйста, закрыть UT в plunker. Это было бы большим подспорьем. Я застрял.

5. Chrome хорош для модульного тестирования angular js. Просто нажмите f12 с клавиатуры и исправьте chrome как debug, тогда вы правильно протестируете

Ответ №2:

я создал здесь новый PLNKR: https://plnkr.co/edit/3RBJneSt7RCClrJ5Hba2?p=preview

 $scope.submitForm = function() {    
      //check to make sure the form is completely valid
       if ($scope.userForm.$valid) {
         alert('our form is amazing');
       }

}; 
$scope.openCancelDialog = function(){
   //alert('why am not showing CAncel');
   ModalService.openModal('Analysis Error', 'I am Error Type', 'Error');
 }


 $scope.openErrorDialog = function(){
    //alert('why am not showing Error');
    ModalService.openModal('Analysis Error', 'I am cancel Type', 'Cancel');
 }
 

Комментарии:

1. на самом деле эти клики не запускались, это было ключевым моментом. по-прежнему привязка сообщений не работает. помогите мне, если вы сможете выяснить, почему привязка сообщений не работает.

2. в обоих ответах обнаружена одна и та же ошибка. Я согласился с тем, кто ответил первым. 🙂

3. Я ответил 1-м 🙋

4. Я обновил plnkr, теперь клики запускаются, и, похоже, все работает нормально 😉