AngularJS и Bootstrap 3: модал не открывается во второй раз

0

У меня есть странная проблема, когда на второй попытке открыть модальный, и я думаю, что это связано с тем, что вы не можете нормально закрыться. Я очень угловатый n00b, поэтому я не уверен, что делаю что-то явно неправильно. Модаль открывается в первый раз, и если я отменил его, он снова откроется (и никогда не будет ошибок). Когда я отправлю, он будет работать в первый раз и передать данные вместе с другими функциями, однако, если я попытаюсь открыть модальный второй раз, я получаю эту ошибку:

TypeError: v2.addCounter is not a function
at fn (eval at <anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:13567:15), <anonymous>:4:364)
at callback (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:23934:17)
at Scope.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:16251:28)
at Scope.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:16351:25)
at HTMLButtonElement.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js:23939:23)
at HTMLButtonElement.m.event.dispatch (http://code.jquery.com/jquery-1.11.2.min.js:3:8549)
at HTMLButtonElement.r.handle (http://code.jquery.com/jquery-1.11.2.min.js:3:5252)

Я использую angularJS (1.4.9), bootstrap (tpls-1.1.1) и jquery (jquery-1.3.2).

Вот скелет моего модального.

<script type="text/ng-template" id="addcounter.html">   
<ng-form name="vm.addCounterForm">
    <div class="modal-header">
        <h3 class="modal-title">Add Counter</h3>
    </div>
    <button type="button" style="btn" ng-click="vm.cancel()">Cancel</button>
    <span ng-show="materialDistributor && materialManufacturer && materialColourGroup && materialDescription">
        <button type="button" style="btn" ng-click="vm.saveCounterModal(A bunch of ng-model stuff being sent)">Save Counter
        </button>
    </span>
</ng-form>

Я собираюсь оставить свой неотредактированный модальный материал в файле углового контроллера:

//baby first modal
    vm.addCounter = function (groupIndex, size) {
        var modalInstance = $uibModal.open({
          animation: true,
          templateUrl: 'addcounter.html',
          controller: ['$uibModalInstance', 'materials', 'groupIndex', addTableCtrl],
          controllerAs: 'vm',
          size: size,
          resolve: {
            materials: function() {return vm.materials},
            groupIndex: function() {return groupIndex}
            }
        });

        modalInstance.result.then(function (counter) {
            //console.log(counter.width, counter.length, counter.shape, counter.material, counter.index);
            vm.saveCounter(counter.width, counter.length, counter.shape, counter.material, counter.index, counter.groupIndex, counter.description);
        }, function () {
        console.log('Modal dismissed at: ' + new Date());
        });
    };

    var addTableCtrl = function($uibModalInstance, materials, groupIndex) {
        var vm = this;
        vm.materials = materials;
        vm.groupIndex = groupIndex;
        vm.saveCounterModal = function(width, length, shape, material, index, description) {
            var counter = {
                width: width,
                length: length, 
                shape: shape, 
                material: material,
                index: index,
                groupIndex: groupIndex,
                description: description
            };

            $uibModalInstance.close(counter);
        };

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

Правильно ли я думаю, что функция закрытия работает неправильно? Как говорится в комментариях, это ребенок первый модальный :(

РЕШЕНИЕ

Кнопка "Сохранить" у меня была функция, которая больше не использовалась. Вместо ошибки в строке, вызываемой функцией, весь модальный показатель показывал как причину ошибки. Надеюсь, это поможет другим людям, имеющим эту проблему!

  • 0
    что такое вм? Вы можете разместить больше кода здесь или создать плункер?
  • 0
    Видите ли вы Modal dismissed at: [date] в консоли, когда вы закрываете или закрываете его?
Показать ещё 8 комментариев
Теги:
bootstrap-modal
twitter-bootstrap-3

1 ответ

0

Поэтому приведенный ниже код вызывается, когда вы нажимаете кнопку "Сохранить", которая закрывает модальную функцию и запускает функцию.

modalInstance.result.then(function (counter) {
        vm.saveCounter(counter.width, counter.length, counter.shape, counter.material, counter.index, counter.groupIndex, counter.description);
    }, function () {
    console.log('Modal dismissed at: ' + new Date());
    });

В вызываемой функции (vm.savecounter) внутри нее была функция, которая вызывала другую функцию (vm.hideCounter - показано ниже), которую я забыл удалить. Эта функция в основном очистила несколько выпадающих меню и текстовые поля, которые теперь были в модальном режиме.

//Basically none of these things are in the DOM since I moved them to the modal.
        vm.hideCounter = function() {  
             vm.addCounter = false;
             vm.shape = "",
             vm.counterWidth = "",
             vm.counterLength = "",
             vm.materialColourGroup = "",
             vm.materialDistributor = "", 
             vm.materialManufacturer = "",
             vm.materialColourGroup = "";
         };

Таким образом, в основном (это моя интерпретация), они пытались манипулировать вещами, которые были в модальном, а не в основном на главной странице. Мне по-прежнему очень странно, что попытка манипуляции (очистка текстового поля, которая больше не была там), дала ошибку во второй попытке.

Звучит ли это так, что это может быть ошибка, и, вероятно, должна быть ошибка при первой попытке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню