2015-04-24 2 views
0

в моем SPA у меня есть активировать функцию, которая имеет обещание getNodes()

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

getNodes() для базы данных в списке «Node» выборку и я делаю сгруппированные нг-таблицу из него.

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 
      }); 
     }); 

    } 

Что происходит, когда id добавляет узел, он не обновляет мою таблицу. Если я обновляю страницу, я могу увидеть недавно добавленный узел. Но я хочу, чтобы мой стол обновился вскоре после этого добавления.

После добавления узла, который я вызываю, активируется снова, но это не сработало.

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

после некоторых исследований я добавил строку ниже.

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

это также не сработало для меня. Пожалуйста помоги.

ответ

0

Я смог исправить мои добавления и обновления, просто обновив мои добавления и обновить вымыслы.

В случае оного я выдвигая новый добавленный объект в $ scope.data после успешного вызова сервера для добавления, а затем вызывающий

$ scope.tableParams.reload();

В случае обновления я обнаруживаю, что объект обновляется по его идентификатору и заменяет его обновленным объектом после успешного вызова Update, а затем вызывает $ scope.tableParams.reload();

Но мой вопрос в том, был ли это лучший способ сделать это обновление ng-table или я что-то упустил?

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(); 
     }); 

    } 
Смежные вопросы