2017-10-19 58 views
1

我需要使用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) 
+0

我認爲你的post API從服務器端返回舊數據。 – Icycool

+0

不,不是。如果我把「loadFilaLists」函數放入$ timeout(function(){loadFilaLists},1000),問題就結束了。爲什麼我不能更新文檔並立即讀回剛剛更新的文檔? –

回答

0

我想,你只只需要添加$promise在你的服務,

this.postFilas = function (cond) { 
    return $http.post(urlBase + '/filas/all', cond).$promise; 
}; 
+0

對不起,但$ http已經返回一個承諾。如果我把「loadFilaLists」函數放入$ timeout(function(){loadFilaLists},1000),問題就結束了。爲什麼我不能更新文檔並立即回讀? –

+0

對不起,我剛解決它。這是我的遠程服務器的問題 –