AngularJS 模态异步关闭不起作用

AngularJS modal async close doesn't work

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

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

//after data loads
modal.close();

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

我找到的一个解决方案是向 modal.close

添加超时
$timeout(function() {
 modal.close();
}, 1)

这可行,但这样做是否正确?或者有其他更好的解决方案?

模态实例有一个 opened 承诺,您应该使用它来保证模态已完成打开,然后再尝试关闭它。来自 the docs:

opened - a promise that is resolved when a modal gets opened after downloading content's template and resolving all variables

rendered - a promise that is resolved when a modal is rendered.

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

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

这里是 demo 您目前使用的方法和使用 opened 的方法。

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

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