我有几个模态,2个正常工作,1在关闭时获得此异常。 (它确实设法关闭模态,但角度注销了这个例外)。
我看得更近了,$modalInstance
在close
方法中定义,但openedWindows.get($modalInstance)
返回undefined
。
我该如何解决这个问题?
答案 0 :(得分:16)
这是v0.10.0中$ modal中的错误。请参阅this github issue,并将在下一版本中修复。
@IvanZh已在此处为类似问题提供了答案 - Dismiss angular modal on URL change - errors in console
在你的控制器中,一旦你执行$ modal.open,添加一个finally块,你明确地将modalInstance设置为null。上面的问题中提供了关于URL更改的解雇模式的plunkr。你的应该非常相似。
$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
});
答案 1 :(得分:1)
如果您尝试立即关闭$ 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);
答案 2 :(得分:1)
$文档(https://angular-ui.github.io/bootstrap/)说: 此外,与模态内容相关的范围增加了两种方法:
$接近(结果)
$驳回(原因)。
javascript虽然与此无关,但注入$ modalInstance并不起作用。 这对我有用:
$http.get('my/api/method', { params: { id: id } })
答案 3 :(得分:0)
这种方法对我来说效果不佳。
我也有价值&#39;未定义的消息,来自基于应用程序状态的一系列对话框。一个对话框是一个旋转图标&#34;您的请求是Processing&#34;,一旦$ http请求被解析,它就在父作用域中关闭。
但是使用这个和前面提到的结果它不会关闭。然后:
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而没有关闭/解除原始实例。