我有以下代码
if (testNavigation() && $scope.selections.somethingChanged) {
return false;
}
在testNavigation中我调用模态对话框,如果我在该对话框中回答Ok,我将somethingChanged重置为false.我的问题是,当执行代码时,testNavigation和modal对话框被旁路并稍后执行,因此我的测试不能正常工作,因为我需要它才能工作.为了使我的逻辑正常工作,我应该改变什么,例如首先调用我的模态对话框,然后在main函数中进行相应的操作?
这是我的testNavigation方法:
var testNavigation = function()
{
if ($scope.selections.somethingChanged) {
var modal = $modal.open({
controller: function ($scope) {
$scope.okClass = 'btn-primary',
$scope.okLabel = resourceFactory.getResource('Labels', 'yes'),
$scope.cancelLabel = resourceFactory.getResource('Labels', 'cancel'),
$scope.title = resourceFactory.getResource('Labels', 'unsavedChanges'),
$scope.message = resourceFactory.getResource('Messages', 'unsavedChanges');
},
templateUrl: '/app/templates/modal'
});
modal.result.then(function () {
$scope.selections.somethingChanged = false;
});
}
return true;
}
我会尝试添加更多细节.我在Index页面控制器中有LoadView()和New()函数.在这两个函数中,我需要执行以下操作:
如果$scope.selections.somethingChanged = false我需要继续逻辑.
如果$scope.selections.somethingChanged = true我需要弹出一个模态对话框,询问我是否要继续并取消我的更改或保持当前页面.如果我回答是,我想继续逻辑.
所以,这就是单独的testNavigation函数的目的.在每个函数调用是顺序的语言中,这将按照我的意图工作.但它在AngularJS / JavaScript中不起作用,我不知道如何让它按照我需要的方式工作.我们用$q服务尝试了一些想法,但没有得到结果.
最佳答案 make testNavigation()总是返回一个promise(使用模态的结果,或者直接使用false,当somethingChanged为false并且你不想问这个问题时.继续这个promise的解决时:
var testNavigation = function() {
if ($scope.selections.somethingChanged) {
var modal = [...]
return modal.result; // returns a promise that will be resolved when the modal is closed
} else {
return $q.when(true); // returns a promise that will be resolved straight away with true
}
}
// when used:
testNavigation().then(function() {
...do stuff...
})