2015-04-24 45 views
0

在我的SPA我有有一個承諾getNodes()

 function activate() { 
     var promises = [getNodes()]; 
     common.activateController(promises, controllerId) 
      .then(function() { log('Activated Nodes List View'); }); 
    } 

getNodes的激活功能()調用數據庫,以獲取「節點」的名單,我想提出一個分組NG表出來。

function getNodes() { 
     return datacontext.getNodes().then(function (response) { 
      $scope.data = response.data; 
      $scope.$watch("query", function() { 

       $scope.tableParams.reload(); 
      }); 
      $scope.tableParams = new ngTableParams({ 
       page: 1,   // show first page 
       count: 10,   // count per page 
       sorting: { 
        name: 'asc' 
       } 
      }, { 
       groupBy: function (item) { 

        return item.NodeGroup.Name; 
       }, 

       total: $scope.data, 
       getData: function ($defer, params) { 

        var filteredData = new Array(); 
        var func = (function() { 
         $scope.data.forEach(function (node) { 
          var is = !!((node.Name.toLowerCase().indexOf($scope.query || '') !== -1) || (node.IP.toLowerCase().indexOf($scope.query || '') !== -1) || (node.NodeGroup.Name.toLowerCase().indexOf($scope.query || '') !== -1)); 
          if (is) { 
           filteredData.push(node); 
          } 
         }); 
        })(); 

        var orderedData = params.sorting() ? 
             $filter('orderBy')(filteredData, params.orderBy()) : 
             filteredData; 

        $scope.tableParams.total(orderedData.length);//this is also nto working for me. 
        $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); 
       }, 
       $scope: $scope 
      }); 
     }); 

    } 

whats發生的是,當ID添加一個節點時不更新我的表。如果我刷新頁面,我可以看到新添加的節點。但是,我希望我的表在刷新後不久就會刷新。

添加節點後,我打電話再次激活,但它沒有奏效。

function addNode(node) { 
     return datacontext.addNode(node).then(function (response) { 
      activate(); 
     }); 

經過一番研究,我在下面加了一行。

  $scope.tableParams.total(orderedData.length); 

這也沒有爲我工作。請幫忙。

回答

0

我能修復我的添加和更新,只需更新我的添加和更新小說。

加我我推新添加的對象轉化爲成功的服務器調用後$ scope.data添加,然後調用

$ scope.tableParams.reload()的情況;

在更新的情況下,我找到了要通過其Id更新的對象,並在成功調用Update之後用更新的對象替換它,然後調用$ scope.tableParams.reload();

但我的問題是,這是最好的方式來做這個刷新ng表或我錯過了什麼嗎?

function addNode(node) { 
     return datacontext.addNode(node).then(function (response) { 
      $scope.data.push(node); 
      $scope.tableParams.reload(); 
      //activate(); 
     }); 

    } 

 function updateNode(node) { 
     return datacontext.updateNode(node).then(function (response) { 
      $scope.data.forEach(function (old) { 
       var is = old.Id == node.Id; 
       if (is) { 
        var index = $scope.data.indexOf(old); 
        $scope.data[index] = node; 
       } 
      }); 
      $scope.tableParams.reload(); 
     }); 

    }