Angular UI Bootstrap $scope. $modalInstance.close причины: Не удается прочитать значение свойства 'w90>

У меня есть несколько модалов, 2 работают отлично, 1 получает это исключение при закрытии. (Это удается закрыть модальным, но angular выводит это исключение).

Я посмотрел ближе и $modalInstance определен внутри метода close, но openedWindows.get($modalInstance) возвращает undefined.

Как я могу это исправить?

Ответ 1

Это ошибка в $modal в v0.10.0. См. эту проблему github и будет исправлена ​​в следующей версии.

@IvanZh предоставил ответ на аналогичный вопрос здесь - Dismiss angular modal on URL change - ошибки в консоли

В вашем контроллере, после того как вы сделаете $modal.open, добавьте блок finally, в котором вы явно установили modalInstance в null. plunkr для отклонения модальности при изменении URL доступен в вышеуказанном вопросе. Ваш должен быть очень похожим.

$scope.modalInstance = $modal.open({
    templateUrl: 'add.html',
    controller: 'AddCtrl'
  });
  $scope.modalInstance.result.then(function() {
    console.log('Success');
  }, function() {
    console.log('Cancelled');
  })['finally'](function(){
    $scope.modalInstance = undefined  // <--- This fixes
  });

Ответ 2

Вы также можете получить эту ошибку, если сразу попытаетесь закрыть $modal. Я столкнулся с этим, когда случайно забыл включить аргумент задержки в мой вызов $timeout. Вот код ошибки:

var modal = $modal.open({
  templateUrl: 'static/partials/simple.dialog.html',
  controller: function($scope) {
    $scope.opts = opts;
  }
});

$timeout(function() {
  simple.close();
});

Это было исправлено добавлением таймаута:

$timeout(function() {
    simple.close();
}, opts.timeout);

Ответ 3

$Документация (https://angular-ui.github.io/bootstrap/) гласит: Кроме того, область, связанная с модальным контентом, дополняется двумя способами:

$близко (результат)

$отклонять (причина).

javascript, хотя и не связан с этим, и инъекция $modalInstance не работает. Это сработало для меня:

app.controller('myController', [ '$scope', 
function ( $scope) {
..

 $scope.addClient = function () {
   $scope.$close(); // or $scope.$dismiss();
 }
}

Ответ 4

Этот метод не помог мне.

У меня также были сообщения "value" undefined из серии диалогов, основанных на состоянии приложения. В одном диалоговом окне была указатель поворота "Ваш запрос обработан", который был закрыт в родительской области после разрешения запроса $http.

Но он не будет закрывать это и вышеупомянутый результат. then:

if ($scope.modalInstance) {
     $scope.modalInstance.dismiss();
}

...

$scope.modalInstance.result.then(function() {
    console.log('Success');
  }, function() {
    console.log('Cancelled');
  })['finally'](function(){
    $scope.modalInstance = undefined;
  });

Все началось, когда я переключился на:

$scope.modalInstance.result.then(function() {
        ...
       $scope.modalInstance = undefined;
}, function() {
       ...
       $scope.modalInstance = undefined;
});

Возможно, ошибка заключалась в том, что $scope.modalInstance был установлен в undefined без закрытия/отклонения исходного экземпляра.