我在包含ajax调用的angular服务中有一个函数,它执行以下操作:
function performCall($scope){
$scope.dataFail = false;
var promise = doAjaxCall();
promise.then(function(data){
if(data.rootElement){
//process...
}else{
$scope.dataFail=true;
}
}
}
Controller 中的$ watch表达式观看dataFail并显示一个对话框,并在确认对话框后显示调用performCall的选项:
$scope.$watch('dataFail', function(dataFail){
if(dataFail){
//open dialog
$( "#ajaxFailurePopup" ).dialog({
zIndex: 3003,
title: "Note:",
modal:true, // Disable controls on parent page
buttons: {
Ok: {
text: 'Retry >',
"class" : 'ppButton floatRight',
click:
function() {
service.performCall($scope);
$("#ajaxFailurePopup").remove();
}
}
}
});
};
});
当ajax调用首次失败时,这在初始化时效果很好。但是,此后
dataFail
不会注册对$watch
所做的任何更改。有人有什么建议吗? 最佳答案
通过在$ scope.apply中包装对performCall的调用来解决:
$scope.apply(
service.performCall($scope);
)
在performCall方法中设置了dataFail标志。道歉。