AngularJs承诺在数据更新后不会刷新

时间:2017-10-19 23:15:50

标签: jquery angularjs mongodb

我需要使用angular和mongodb更新文档。

更新功能(“vm.UpdateItem”)运行良好。

我的问题是如何在更新后刷新视图。

为此,我单击一个按钮并在“vm.UpdateItem()”中调用promise来更新文档。 当promise返回时,我可以检查返回的数据是否已更新。

之后,我使用“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)  

1 个答案:

答案 0 :(得分:0)

我认为,您只需要在服务中添加this.postFilas = function (cond) { return $http.post(urlBase + '/filas/all', cond).$promise; };

In [4553]: [x.strftime('%m/%d/%Y') for x in panda_datelist]
Out[4553]: ['10/20/2017', '10/23/2017', '10/24/2017']