我需要使用angular和mongodb更新文檔。AngularJs承諾在數據更新後不刷新
更新函數(「vm.UpdateItem」)運行良好。
我的問題是如何在更新後刷新視圖。
要做到這一點,我點擊一個按鈕,並在「vm.UpdateItem()」中調用承諾來更新文檔。 當承諾返回時,我可以檢查返回的數據是否已更新。
之後,我使用「loadFilaLists」函數從服務器重新加載數據,但數據未顯示更新。
如果我點擊CTRL-F5,視圖將重新加載並正確顯示剛剛更新的數據。
我看不清楚錯誤在哪裏,因爲我正確使用了諾言中的「then」。
在某個地方是否有計時器問題。
沒問題更新一個mongodb文件並立即回讀它,或者是否有一些「超時」限制來做到這一點?
一些幫助將不勝感激。
//標記
<button class="btn btn-sm btn-success" ng-click="vm.UpdateItem()">
<span>Update Item</span>
</button>
//服務
angular.module("clinang").service('dataService', ['$http','config', function ($http,config) {
this.postFilas = function (cond) {
return $http.post(urlBase + '/filas/all', cond)
};
this.getFilas = function (where) {
return $http.get(urlBase+'/filas',{params:{"where":where}});
};
this.getFila = function (id) {
return $http.get(urlBase + '/filas/' + id);
};
this.insertFila = function (tipo) {
return $http.post(urlBase+'/filas', tipo);
};
this.updateFila = function (tipo) {
return $http.post(urlBase + '/filas/' + tipo._id, tipo)
};
this.deleteFila = function (id) {
return $http.delete(urlBase+'/filas/' + id);
};
}]);
//控制器
var postFilas=function(checked, di, df){
var deferred=$q.defer()
var cond=checked?medId:undefined;
var obj={'profissional':cond, '$and':[
{'datahora_ent':{'$gte':di}},
{'datahora_ent':{'$lt': df}}
] };
dataService.postFilas(obj).then((response)=>{
deferred.resolve(response.data)
})
.catch((erro)=>{
deferred.reject('erro')
})
return deferred.promise
}
var loadFilaLists=function(checked){
var di=moment(vm.dateRange.date.startDate).clone().startOf('day').toDate();
var df=moment(vm.dateRange.date.endDate).clone().endOf('day').toDate();
postFilas(checked,di,df).then((data)=>{
console.log('data2',data) //problem - data is showing old data, before the update
})
}
vm.UpdateItem=function(item){
dataService.updateFila(item).then((response)=>{ //updated
console.log('data1',response.data) //data is updated and return ok
loadFilaLists(true); //trying refresh all data
}
}
loadFilaLists(true)
我認爲你的post API從服務器端返回舊數據。 – Icycool
不,不是。如果我把「loadFilaLists」函數放入$ timeout(function(){loadFilaLists},1000),問題就結束了。爲什麼我不能更新文檔並立即讀回剛剛更新的文檔? –