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 без закрытия/отклонения исходного экземпляра.