Angularjs 打开模式返回结果,而不是关闭模式后返回结果

Angularjs 打开模式返回结果,而不是关闭模式后返回结果,angularjs,modal-dialog,Angularjs,Modal Dialog,控制器“somePopupCtrl”在模态打开时返回true,而不是在模态关闭后返回true 这是密码- controller('somePopupCtrl', function ($scope, $rootScope) { function delete() { var retVal = true; retVal = calculateRetCal(); if(retVal) { var modalInstance = $modal.open({

控制器“somePopupCtrl”在模态打开时返回true,而不是在模态关闭后返回true

这是密码-

controller('somePopupCtrl', function ($scope, $rootScope) {
function delete() {
  var retVal = true;

  retVal = calculateRetCal();

 if(retVal) {
  var modalInstance = $modal.open({
                    templateUrl: 'removeData.html', 
                    controller: 'removeDataPopupCtrl',
                    backdrop : 'static'
                });

// want to return true for the delete() method when modal is closed.
modalInstance.result.then(function (data) {
 return true;
});
} else {
 return false;
}
 return retVal;
} 
}
方法
delete()
返回true或false,并基于我们在UI上隐藏/显示的结果

然而,当modal打开时,而不是在modal关闭后,UI会立即隐藏/显示。因此,
modalInstance.result。然后,
code不会生效

发生这种情况可能是因为
modalInstance.result。那么
是异步调用吗


如何仅在关闭modal时从方法返回?

返回语句在PROMITE中无法按预期工作。return语句不会等待完成模型实例结果函数。异步函数就是这样工作的

您应该传递一个回调函数来删除它,并像这样调用它

抱歉,我没有运行此操作,但逻辑是正确的

函数删除(回调){
var-retVal=true;
retVal=calculateRetCal();
如果(返回){
var modalInstance=$modal.open({
templateUrl:'removeData.html',
控制器:“removeDataPopupCtrl”,
背景:“静态”
});
//当modal关闭时,希望delete()方法返回true。
modalInstance.result.then(函数(数据){
回调(true);
});
}否则{
回调(false)
}
回调(retVal)
} 
删除(功能(响应){
控制台日志(响应);
//当你得到正确/错误的回答时,做你想做的事

})
您无法将异步代码转换为同步代码,这是不可能的。最灵活的方法是始终回报承诺:

if(retVal) {
  return $modal.open({
                    templateUrl: 'removeData.html', 
                    controller: 'removeDataPopupCtrl',
                    backdrop : 'static'
                }).result;
} else {
  return $q.reject('was not opened, or smth');
}
注意:一般来说,
$modal
可能会关闭,因此,
$modal().result
会被拒绝(您的then()不会运行),并且由于很容易错过此类情况,因此您总是返回承诺和链


p.p.S.当您返回$q.reject或$q.When时-与完全同步代码相比,您需要额外支付1个摘要。如果要避免这种情况,可以使用上面建议的回调或promise$$state.status属性。

只要打开模式,就会返回true,UI就会隐藏特定的视图元素。所以这个解决方案不起作用。只有当打开的对话框关闭时,才能从视图中隐藏元素。y,我忘记添加。结果,已更新。这不是一个解决方案,只是一个示例,说明当您有条件同步和异步代码时,您可以如何管理这种情况。