AngularJS模态异步关闭不起作用

时间:2015-07-21 15:09:24

标签: javascript angularjs angular-bootstrap

我正在创建一个模态,并在数据进入后台时将其关闭。

var modal = modal.open({..some params..});

//after data loads
modal.close();

所以我的问题是,因为一切都是异步的,如果我的数据瞬间出现,那么我的modal.close()会在模态完全打开之前执行,然后我的屏幕仍然停留在模态屏幕上。

我找到的一个解决方案是向modal.close添加超时

$timeout(function() {
 modal.close();
}, 1)

这样可行,但这是正确的方法吗?还是有其他更好的解决方案?

1 个答案:

答案 0 :(得分:2)

模态实例上有一个opened承诺,您应该使用它来保证模态在您尝试关闭之前已经完成打开。来自the docs

  

opened - 在下载内容模板并解析所有变量后打开模态时解决的承诺

     

rendered - 在呈现模态时解析的承诺。

将其与您的HTTP请求混合可能看起来像

modal = $modal.open({...})
$http.get(...).then(function(response) {
  modal.opened.then(modal.close)
})

以下是您目前正在使用opened进行此操作的demo

$scope.open = ->
  modalInstance = $modal.open(
    templateUrl: 'myModalContent.html',
    controller: 'ModalInstanceCtrl'
  )

  if $scope.work
    modalInstance.opened.then(->
      modalInstance.close()
    )
  else 
    modalInstance.close()