【发布时间】:2014-01-31 08:45:16
【问题描述】:
我正在尝试在函数工作时使用 ajax 微调器,但我不知道如何在函数完成时告诉微调器隐藏。
代码是这样工作的:
- 单击一个按钮,将出现微调器,并触发控制器中的一个函数来更新一些数据。
- 该函数访问使用 $resource 更新数据的服务
- 无法隐藏微调器,因为我不知道该过程何时完成。
那么,我怎么知道整个事情什么时候完成,这样我就可以停止显示微调器了?
单击视图中的按钮会触发updateData()。在我的控制器中,我有:
$scope.updateData = function () {
Data.updateData();
}
上面引用的Data服务的updateData方法是:
updateData : function() {
API.update({
uri : 'updateData'
}, {
data : data
}, function(data) {
data = data[0];
$rootScope.$emit('Data.updateSuccess');
}, function(err) {
$rootScope.$emit('Data.updateError', err);
});
该 API 来自扩展 $resource 的工厂:
.factory('API', ['$resource', function($resource){
return $resource('/location/:uri', {}, {
query : {
method : 'GET',
isArray : true
},
update: {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
},
create: {
method: 'POST',
isArray : true,
headers: {
'Content-Type': 'application/json'
}
}
});
}]);
}
起初我以为我可以用
在控制器中收听那些 $emits(我也尝试过 $broadcast) $rootScope.$on('Data.updateSuccess', $log.log('update success'));
$rootScope.$on('Data.updateError', $log.log('update failure'));
但是当我这样做时,我每次都会得到它们。那么我需要做什么来确定在完成此更新过程时何时隐藏我的 ajax 微调器?
【问题讨论】:
-
您可能应该返回一个 Promise 而不是仅仅调用该函数,然后向其添加一个
.then处理程序。 -
@BenjaminGruenbaum 在我必须使用的范围内,我将如何做到这一点?
标签: javascript ajax angularjs