从 $http promise 以编程方式关闭模态对话框
Close modal dialog programmatically from $http promise
我将 Bootstrap UI 与 AngularJS 结合使用来显示模态对话框,同时正在处理 $http
请求。将其视为等待对话框。我想将代码保留为一个简单的四行代码,我可以像这样在不同的位置放置它:
$scope.foobar = function() {
var waitDialog = $uibModal.open({ templateUrl: 'waitDialog.html' });
waitDialog.result.catch(function() { /** Rejection ignored */ });
MyService.doSomething()
.then(function onSuccess(response) {
waitDialog.dismiss('Success.');
// ...
})
.catch(function onError(response) {
waitDialog.dismiss('Failed.');
});
};
这在大多数情况下工作正常,但模式对话框有时不会以编程方式关闭。它保持打开状态,即使 HTTP 请求返回结果。我在对话框中添加了一个关闭按钮,因此用户仍然可以通过手动调用 $dismiss()
来关闭它。
但是,我不明白为什么对话框并不总是以编程方式关闭。我知道这个事实,即 $http
returns一个承诺,可能会有延迟。但是我通过将 waitDialog
对象打印到控制台来调试代码,它似乎总是既定义又相同的对象。我没有看到任何范围问题。 我错过了什么?
模态框打开前不能关闭,所以应该是waitDialog.opened.then(() => waitDialog.dismiss())
我将 Bootstrap UI 与 AngularJS 结合使用来显示模态对话框,同时正在处理 $http
请求。将其视为等待对话框。我想将代码保留为一个简单的四行代码,我可以像这样在不同的位置放置它:
$scope.foobar = function() {
var waitDialog = $uibModal.open({ templateUrl: 'waitDialog.html' });
waitDialog.result.catch(function() { /** Rejection ignored */ });
MyService.doSomething()
.then(function onSuccess(response) {
waitDialog.dismiss('Success.');
// ...
})
.catch(function onError(response) {
waitDialog.dismiss('Failed.');
});
};
这在大多数情况下工作正常,但模式对话框有时不会以编程方式关闭。它保持打开状态,即使 HTTP 请求返回结果。我在对话框中添加了一个关闭按钮,因此用户仍然可以通过手动调用 $dismiss()
来关闭它。
但是,我不明白为什么对话框并不总是以编程方式关闭。我知道这个事实,即 $http
returns一个承诺,可能会有延迟。但是我通过将 waitDialog
对象打印到控制台来调试代码,它似乎总是既定义又相同的对象。我没有看到任何范围问题。 我错过了什么?
模态框打开前不能关闭,所以应该是waitDialog.opened.then(() => waitDialog.dismiss())