Angularjs 打开模式返回结果,而不是关闭模式后返回结果
控制器“somePopupCtrl”在模态打开时返回true,而不是在模态关闭后返回true 这是密码-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({
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,我忘记添加。结果,已更新。这不是一个解决方案,只是一个示例,说明当您有条件同步和异步代码时,您可以如何管理这种情况。