J'ai besoin de mettre à jour un document en utilisant angular et mongodb.La promesse d'AngularJs n'est pas rafraîchissante après la mise à jour des données
La fonction de mise à jour ("vm.UpdateItem") fonctionne correctement.
Mon problème est de savoir comment actualiser la vue après la mise à jour. Pour ce faire, je clique sur un bouton et appelle une promesse dans "vm.UpdateItem()" pour mettre à jour le document. Lorsque la promesse revient, je peux vérifier que les données retournées ont été mises à jour. Ensuite, je recharge les données du serveur avec la fonction "loadFilaLists", mais les données ne sont pas mises à jour.
Si j'appuie sur CTRL-F5, la vue se recharge et affiche correctement les données qui viennent d'être mises à jour.
Je ne peux pas voir où est l'erreur, parce que, j'utilise le "puis" de la promesse correctement.
Y at-il un problème de minuterie dans un endroit.
Est-ce que ok met à jour un document mongodb et le relit immédiatement, ou y at-il des limites de "timeout" pour le faire?
De l'aide sera appréciée.
// balisage
<button class="btn btn-sm btn-success" ng-click="vm.UpdateItem()">
<span>Update Item</span>
</button>
// Service
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);
};
}]);
// contrôleur
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)
Je pense que votre API post renvoie d'anciennes données du côté serveur. – Icycool
Non, ce n'est pas le cas. Si je mets la fonction "loadFilaLists" dans un timeout $ (function() {loadFilaLists}, 1000) le problème est terminé. Pourquoi je ne peux pas mettre à jour un document et relire immédiatement le document qui vient d'être mis à jour? –