我正在创建一个模态,一旦数据进入后台关闭它。
var modal = modal.open({..some params..});
//after data loads
modal.close();
所以我的问题是,因为一切都是异步的,如果我的数据是即时的,那么我的modal.close()在模态完全打开之前执行,然后我的屏幕仍然停留在模态屏幕上。
我发现的一个解决方案是在mode .close
中添加超时$timeout(function() {
modal.close();
}, 1)
这是有效的,但这是正确的方法吗?还是有其他更好的解决办法?
模态实例上有一个opened
承诺,你应该用它来保证模态在你试图关闭它之前已经完成打开。来自文档:
opened
-在下载内容模板并解析所有变量后打开模态时解决的承诺
rendered
-一个承诺,是解决当一个模态呈现。
将它与HTTP请求混合可能看起来像
modal = $modal.open({...})
$http.get(...).then(function(response) {
modal.opened.then(modal.close)
})
这里有一个演示,演示了您当前的操作方式和使用opened
的操作方式。
$scope.open = ->
modalInstance = $modal.open(
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl'
)
if $scope.work
modalInstance.opened.then(->
modalInstance.close()
)
else
modalInstance.close()